我有两个这样的词典:
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'
答案 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']}