2015-04-27 131 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] 

它比创建一个新的速度更快。

相关问题