使用键创建python字典:来自d1的值对和来自d2的值

时间:2013-04-22 22:48:56

标签: python string dictionary

编辑包含正确的虚拟代码。 - 由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)

由于列表不可用,这不起作用。这让我很难过,我想不出解决这个问题的方法,任何想法?

注意这是不是简单的小写 - >大写问题,这只是为了捕捉问题的本质而创建的虚拟文本。

2 个答案:

答案 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'}