2014-06-09 38 views
0

我有一個包含元組的關鍵兩個Python字典的元組,並讓他們出現蟒蛇類型的字典的聯盟,同時保持值

dict1 = {(name1,name2):data1a, (name2,name3):data2a, ...} 

dict2 = {(name1,name2):data1b, (name2,name3):data2b, ...} 

詞典都沒有漂浮的值長度相同,我想根據它們的鍵值執行它們的聯合,這樣我就剩下一個包含兩個值的元組的字典。這將顯示爲

dict_unified = {(name1, name2) : (data1a,data1b), (name2,name3) : (data2a,data2b)} 

我知道dictionary.update()有效地做到這一點的合併,但將包括鍵值對,只有在一個字典中,我要排除,並且只會保留一個值,爲每個鍵。

回答

0

怎麼樣使用字典理解:

{key: (value1, dict2[key]) for key, value1 in dict1.iteritems() if key in dict2} 

這使通用於dict1dict2鍵併合並在一個元組的值。

+0

是的,這個工作正如我所希望的那樣。我想避免循環,並希望可能有一個交集()函數,因爲有集合。然而,由於哈希運算,運行時間並不長 – cubedNnoobed

0

爲了得到屬於兩個字典的鍵,你可以使用set.intersection(因爲這一個路口,不是工會):

>>> d1 = {(1, 2): 3, (4, 5): 6} 
>>> d2 = {(1, 2): 7, (8, 9): 10} 
>>> set(d1).intersection(d2) 
{(1, 2)} 

然後建立相應的值的字典從兩個字典:

>>> {k: (d1[k], d2[k]) for k in set(d1).intersection(d2)} 
{(1, 2): (3, 7)}