编辑包含正确的虚拟代码。 - 由DSM解决 -
这个问题看起来很简单(在我脑海中),我正试图找到一种方法来根据另一个词典k,v对“更新”一个词典值。
虚拟文字:
>>> dict1 = {'hello':'HELLO', 'bye':'BYE', 'right':'RIGHT', 'left':'LEFT'}
>>> dict2 = {'why':['hello', 'bye'], 'direction': ['left', 'right', 'right', 'right']}
结果我想: - 只需更新dict2
即可包含dict1
密钥的值(如果存在)。
updated_dict = {'why':['HELLO', 'BYE'], 'direction':['LEFT', 'RIGHT', 'RIGHT', 'RIGHT']}
我正在尝试这样做:
updated_dict = dict()
for v in dict2.values():
id_list = dict2[v]
for uniq_id in id_list:
new_id = dict1[uniq_id]
if updated_dict.has_key(uniq_id):
updated_dict[v].append(uniq_id)
else:
updated_dict[v] = list()
updated_dict[v].append(uniq_id)
由于列表不可用,这不起作用。这让我很难过,我想不出解决这个问题的方法,任何想法?
注意这是不是简单的小写 - >大写问题,这只是为了捕捉问题的本质而创建的虚拟文本。
答案 0 :(得分:4)
疯狂的猜测:你在想这样的事吗?
>>> dict1 = {'hello':'HELLO', 'bye':'BYE', 'right':'RIGHT', 'left':'LEFT'}
>>> dict2 = {'why': ['hello', 'bye'],
'direction': ['left', 'right', 'right', 'right'],
'example': ["don't replace me", "right"]}
>>> new_d = {k: [dict1.get(x,x) for x in v] for k,v in dict2.items()}
>>> new_d
{'direction': ['LEFT', 'RIGHT', 'RIGHT', 'RIGHT'],
'why': ['HELLO', 'BYE'],
'example': ["don't replace me", 'RIGHT']}
我使用了get
字典方法,它接受一个默认值,允许你没有替换的值保持不变。
答案 1 :(得分:3)
可能不是最简单的,但适用于您的示例:
>>> m={ x:",".join([dict1[y] for y in dict2[x].split(", ")]) for x in dict2}
或
>>> m={ k:",".join([dict1[y] for y in v.split(", ")]) for k,v in dict2.items()}
结果相同:
>>> m
>>> {'direction': 'LEFT,RIGHT,RIGHT,RIGHT', 'why': 'HELLO,BYE'}