在Python中正确更新字典中的键?

时间:2016-06-16 10:44:04

标签: python dictionary key

我有一本字典(d2),我必须创建一个只包含满足条件的键的新字典(new_dict)。

这是我的代码:

d2 = dict((y,x) for x,y in d.iteritems())

new_dict={}
for name in list:
   for keyx in d2:
       if name in keyx:       
           new_dict=dict((keyx,d2[keyx]) for v in d2.itervalues())
           print new_dict    

但是当我打印new_dict时,我为每个键获得了一个new_dict:

{key:value}
{key2:value2}
ecc..

怎样才能获得一本独特的字典?

3 个答案:

答案 0 :(得分:3)

以下是如何使用示例进行操作的方法。

>>> f={'c':1,'d':2,'e':3}
>>> l=['c','d']
>>> {i:f[i] for i in f if any([k in i for k in l])}
{'c': 1, 'd': 2}

对于您的用例,它只是。

new_dict = {i:d2[i] for i in d2 if any([k in i for k in list])}  

尽管如此,请避免使用list 等变量名称。

此外,而不是

d2 = dict((y,x) for x,y in d.iteritems())

你可以做到

d2 = {y:x for x,y in d.iteritems()}

答案 1 :(得分:1)

只需更新您的代码,例如 -

d2 = dict((y,x) for x,y in d.iteritems())

new_dict={}
for name in list:
   for keyx in d2:
       if name in keyx:       
           new_dict[keyx] = d2[keyx]
           print new_dict 

你做错了是在循环中一次又一次地制作字典......

当你写这个 -

new_dict[keyx] = dict('key' = 'something')

创建了一个新词典,这就是你问题的原因...... 你可以像其他答案一样以更多的pythonic方式解决它......

答案 2 :(得分:1)

您需要使用找到的新项目更新new_dict,而不是每次都重新创建新词典。这是一个例子:

d2 = {'a': 1, 'b': 2, 'ab': 3}
l = ['a']
new_dict = dict([(k, v) for k, v in d2.items() if any(x in k for x in l)])
print new_dict

这将输出:

{'a': 1, 'ab': 3}