2012-03-13 51 views
1

我有2個字典,只要值的類型。我想從2個字典的每個可能的2值組合中應用一些計算,並維護一個數據結構,以保持結果和輸入值。即:鍵(a),值(a),鍵(b),值(b),f(值(a),值(b))。你會建議進行此項操作 enter image description here什麼是最適合的Python數據結構,以保持2個字典的成對計算結果?

+2

我認爲你的意思是'鍵(a),值(a),鍵(b),值(b),f(值(a),值(b))'對嗎? – 2012-03-13 14:03:17

+0

是的你是對的,我在原帖中修復了它 – curious 2012-03-13 14:08:00

回答

3

什麼樣的數據結構,當你的計算只依賴於字典的值,你應該重新制定您的問題聲明,只需要值的迭代,而不是字典。

您可以使用元組作爲字典鍵:

import itertools 
Adict = {"x": 1, "y": 2, "z":3} 
Bdict = {"foo": 4, "bar": 5, "baz":6} 
A,B = Adict.values(),Bdict.values() 
def comp(a, b): 
    return a * b # Insert complicated computation here 
res = {(a,b):comp(a,b) for a,b in itertools.product(A, B)} 
+0

看來笛卡爾產品更合適: – curious 2012-03-13 14:22:20

+1

肯定是固定的。 – phihag 2012-03-13 14:27:08

+0

另外,您的代碼在第4行的語法不正確。itertools.permutations()返回1列表的所有可能組合http://docs.python.org/library/itertools.html#itertools.permutations – curious 2012-03-13 14:29:38

1

無論類型的字典列表或更復雜的迭代器定義自己的自定義對象,以表示不同的鍵,你的數據和遍歷數據的方式有。

0

我建議用詞典:

  • 鍵在元組的元組:((key(a), value(a)) , (key(b), value(b)))
  • 值是長(如果它是你的函數f(A,B)返回的類型)
相關問題