如果两个字典的值/键对匹配,则将列表对象字典值替换为另一个字典的值

时间:2017-03-15 09:58:16

标签: python dictionary

我有两个这样的词典:

dict1 = {'parent1': ['AAA','BBB'],'parent2': ['AAA','CCC'],'parent3': ['ZZZ', 'BBB']}
dict2 = {'AAA': 'alfa','BBB': 'beta','CCC': 'gamma', 'ZZZ':'epsilon'}

我想获得以下字典

dict3 = {'parent1': ['alfa','beta'],'parent2': ['alfa','gamma'],'parent3': ['epsilon', 'beta']}

其中存储在列表中的dict1的值如果与dict2键匹配则替换为dict2值。

我试过

dict3={k: dict2.get(v, v) for k, v in dict1.items()}

但它返回

TypeError: unhashable type: 'list'

2 个答案:

答案 0 :(得分:4)

你错过了v值(列表)的迭代。

dict1 = {'parent1': ['AAA','BBB'],'parent2': ['AAA','CCC'],'parent3': ['ZZZ', 'BBB']}
dict2 = {'AAA': 'alfa','BBB': 'beta','CCC': 'gamma', 'ZZZ':'epsilon'}

dict3={k: [dict2.get(i, i) for i in v] for k, v in dict1.items()}

结果:

{'parent3': ['epsilon', 'beta'], 'parent2': ['alfa', 'gamma'], 'parent1': ['alfa', 'beta']}

答案 1 :(得分:0)

减少pythonic,但也做好工作。奇怪的是只写出来了。

 dict3={k: [dict2[v[0]], dict2[v[1]]] for k, v in dict1.items()}
 prints {'parent3': ['epsilon', 'beta'], 'parent2': ['alfa', 'gamma'], 'parent1': ['alfa', 'beta']}

编辑:

 dict3={k: [dict2.get(v[0],v[0]), dict2.get(v[1],v[1])] for k, v in dict1.items()}
 prints {'parent3': ['epsilon', 'beta'], 'parent2': ['alfa', 'gamma'], 'parent1': ['alfa', 'beta']}