2015-04-27 126 views
1

目前匹配的值更換Python字典的價值,我有兩個字典與其他字典,其他字典鍵

dictionary1 = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'} 
dictionary2 = {'value1': 'AAA', 'value3': 'CCC'} 

我想從dictionary2與值替換的dictionary1其值與上面的例子將產生如下輸出

{'key1': 'AAA', 'key2': 'value2', 'key3': 'CCC'} 

從我讀過我想我應該開始我的代碼如下其他例子:

for key, value in dictionary1.iteritems(): 
    if value == 

現在我不確定最好的方法來循環其他字典,以查找來自dictionary1的值是否與dictionary2中的鍵匹配。

+1

與實際問題無關,但我建議給你的字典新的名字 - 如果我看到名字'list1',我可能會認爲它是'list'而不是'dict' ;-) – mgilson

+0

謝謝 - 我改變了他們 – algorhythm

回答

5

你可以用字典解析做到這一點,像這樣

>>> dictionary1 = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'} 
>>> dictionary2 = {'value1': 'AAA', 'value3': 'CCC'} 
>>> {k: dictionary2.get(v, v) for k, v in dictionary1.items()} 
{'key3': 'CCC', 'key2': 'value2', 'key1': 'AAA'} 

這裏,dict2.get(v, v)將試圖從dict2對應值v值。如果未找到,則會返回默認值(第二個參數),v本身。

注1:你有什麼問題,稱爲字典,而不是列表。

注2:如果您正在使用Python 2.7,那麼你可能想使用dict1.iteritemsdict1.viewitems代替dict1.items。我們用this answer的例子詳細解釋了原因。

+0

這不適合我。我不知道爲什麼。它應該,但它不是。 – TheTank

1

您基本上想要對第二個字典進行循環,直到找到匹配的值。

for key, value in list1.iteritems(): 
    for key2 in list2: 
     if value == key2: 
      list1[key] = list2[key2] 
      break 
+1

運行時可以與size(list1)* size(list2)成比例,所以它不是這樣做的好方法。 –

6

第二個列表中的交叉查找,如果它不存在則回退到默認值即可。

>>> {key : list2.get(value, value) for key, value in list1.items()} 
{'key3': 'CCC', 'key2': 'value2', 'key1': 'AAA'} 

get(key[, default])讓您查找在字典中的關鍵,如果該值不存在,則返回默認值。默認值應該與您在第二個字典中搜索的值相同。

+0

最「'python」的方式來做到這一點。 – tema

1

對於在地方的變化:

for k,v in dictionary1.items(): 
    if v in dictionary2 : dictionary1[k]=dictionary2[v] 

它比創建一個新的速度更快。

相關問題