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

alg*_*thm 1 python dictionary list

目前我有两本词典

dictionary1 = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
dictionary2 = {'value1': 'AAA', 'value3': 'CCC'}
Run Code Online (Sandbox Code Playgroud)

我想用上面的例子中dictionary1的值替换值,以dictionary2产生以下输出

{'key1': 'AAA', 'key2': 'value2', 'key3': 'CCC'}
Run Code Online (Sandbox Code Playgroud)

从其他示例我已经读过,我认为我应该开始我的代码如下:

for key, value in dictionary1.iteritems():
    if value ==
Run Code Online (Sandbox Code Playgroud)

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

the*_*eye 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'}
Run Code Online (Sandbox Code Playgroud)

在这里,dict2.get(v, v)将努力让对应值的值vdict2.如果未找到,则返回默认值(第二个参数)v本身.

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

注意2:如果您使用的是Python 2.7,那么您可能想要使用dict1.iteritemsdict1.viewitems代替dict1.items.在这个答案中,用精巧的例子解释了原因.


Abh*_*jit 6

如果不存在,则在第二个列表中进行交叉查找,并回退到默认值.

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

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