Python 如果两个字典的值/键对匹配,则用另一个字典的值替换列表对象字典值
我有两本这样的字典:Python 如果两个字典的值/键对匹配,则用另一个字典的值替换列表对象字典值,python,dictionary,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'
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']}
其中,如果与dict2键匹配,则存储在列表中的dict1值将替换为dict2值
我试过了
dict3={k: dict2.get(v, v) for k, v in dict1.items()}
但它又回来了
TypeError: unhashable type: 'list'
您缺少对
v
值(即列表)的迭代
结果:
{'parent3': ['epsilon', 'beta'], 'parent2': ['alfa', 'gamma'], 'parent1': ['alfa', 'beta']}
您缺少对
v
值(即列表)的迭代
结果:
{'parent3': ['epsilon', 'beta'], 'parent2': ['alfa', 'gamma'], 'parent1': ['alfa', 'beta']}
不太像蟒蛇,但也能起作用。恕我直言,同样的内容只写出来了
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']}
不太像蟒蛇,但也能起作用。恕我直言,同样的内容只写出来了
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']}
不处理值不在dict2中的情况(虽然我说过dict2总是dict1的值,但我读错了问题,现在我们的答案完全相同;)这取决于你是否喜欢一个额外的for循环,以及dict1是否总是包含两个值的列表。不处理值不在
dict2
True中的情况我读错了问题,尽管我说过dict2总是dict1的值现在我们的答案完全相同;)这取决于您是否喜欢额外的for循环,以及dict1是否始终包含具有两个值的列表。