使用与其他字典键匹配的另一个字典的值替换Python字典的值

时间:2015-04-27 15:46:57

标签: python list dictionary

目前我有两本词典

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

我想将dictionary1的值替换为来自dictionary2的值,上面的示例会产生以下输出

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

从其他例子我看过我认为我应该按照以下方式开始我的代码:

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

现在我不确定循环浏览其他字典的最佳方法,以查找来自dictionary1的值是否与来自dictionary2的键匹配。

5 个答案:

答案 0 :(得分:6)

您可以使用字典理解来完成此操作,例如

>>> 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)会尝试从v获取与值dict2对应的值。如果未找到,则返回默认值(第二个参数),v本身。

注1:您所涉及的内容称为词典,而不是列表。

注2:如果您使用的是Python 2.7,那么您可能希望使用dict1.iteritemsdict1.viewitems代替dict1.items。用this answer中的例子精心解释了这个原因。

答案 1 :(得分:6)

第二个列表中的交叉查找,如果不存在,则回退到默认值是可行的方法。

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

get(key[, default])允许您在字典中查找键,如果该值不存在,则返回默认值。默认值应与您在第二个字典中搜索的值相同。

答案 2 :(得分:2)

你基本上想要在你的第二个字典上做第二个for循环,直到找到匹配的值。

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

答案 3 :(得分:2)

对于现场更改:

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

它比创建新的更快。

答案 4 :(得分:1)

添加此解决方案,以呈现条件更复杂的dict理解解决方案:

我也遇到过类似的情况,但目标是替换不同dict中的匹配键,其中dict对每个键值对具有多个值。经过漫长的尝试错误时间和条件dict理解后,这是我的解决方案:

>>> result = {k: [dic2.get(v, v) for v in v] for k, v in dic1.iteritems()}

图:

>>> dic1 = {'key1': ['value1', 'value12', 'value13'], 'key2': ['value2', 'value21'] 'key3': ['value3']}
>>> dic2 = {'value1': 'path_AA', 'value12': 'path_BB',  'value2': 'path_DD', 'value21': 'path_EE', 'value3': 'path_FF'}
>>>
>>> result = {'key1': ['path_AA', 'path_BB'], 'key2': ['path_DD', 'path_EE'], 'key3': 'path_FF'}
相关问题