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

Updating correctly keys in dictionary in Python?

我有一个字典 (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..

怎样才能获得唯一的字典??

下面是一个例子。

>>> 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()}

只需像 -

一样更新您的代码
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 方式解决它...

您需要使用找到的新项目更新 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}