我有一本字典(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..
怎样才能获得一本独特的字典?
答案 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}