2012-11-16 117 views
2

我有2個字典。在Python中合併2個字典

dict1={('SAN RAMON', 'CA'): 1, ('UPLAND', 'CA'): 4, ('POUGHKEESIE', 'NY'): 3, ('CATTANOOGA', 'TN'): 1} 

dict2={('UPLAND', 'CA'): 5223, ('PORT WASHING', 'WI'): 11174, ('PORT CLINTON', 'OH'): 6135, ('GRAIN VALLEY', 'MO'): 10352, ('GRAND JUNCTI', 'CO'): 49688, ('FAIRFIELD', 'IL'): 5165} 

這些只是樣本,實際上每個字典都有數百個條目。我試圖合併這兩個字典並創建包含{dict1.values():dict2.values()}的字典3,但前提是該城市出現在兩個字典中。因此,在dict3中的一個條目看起來像

{4:5223} # for 'UPLAND', 'CA' since it appears in both dict1 and dict2 

這只是我寫的一個更大的函數中的一小步。我正想嘗試類似:

for item in dict1.keys(): 
     if item not in dict2.keys(): 
      del item 
     return dict[(dict1.keys())=(dict2.keys())] 

我無法弄清楚如何確保從dict1投訴數量與它匹配在dict2被提到了同一個城市。

回答

5

這裏就是我想你想(demo)

dict3 = dict((dict1[key], dict2[key]) for key in dict1 if key in dict2) 

擴大一點,它看起來像這樣:

dict3 = {} 
for key in dict1: 
    if key in dict2: 
     dict3[dict1[key]] = dict2[key] 
0

常見的鍵是:

set(dict1.keys()) & set(dict2.keys()) 

創建字典3包含{dict1.values():dict2.values()}

這是沒有意義的,字典是重要的價值對......你真正想要什麼?提示:

dict3 = {} 
for k in set(dict1.keys()) & set(dict2.keys()): 
    dict3[dict1[k]]=dict2[k] 

{4: 5223} 
+0

僅舉 - 常用鍵 - 在2.7,你可以做'dict1.viewkeys()&dict2' –

0

直接的方法是檢查在每個關鍵一個用於其他會員:

result = {} 
for key in dict1: 
    if key in dict2: 
     result[dict1[key]] = dict2[key] 

你也嘗試將它們轉換成setfrozenset,並採取它們的交集,但它不是我清楚這是否會更快與否:

keys_in_both = frozenset(dict1) & frozenset(dict2) 
result = dict((dict1[key], dict2[key]) for key in keys_in_both)