我正在研究Python代码,以删除列表字典中的某些元素。
dict ={'s': ['a','b'],'d': ['c','d'],'g': ['e','f']}
values = ['a','c','f']
list2 ={i:j.remove(value) for i,j in dict.items() for k in j for value in values if value in k}
print(list2)
下面的代码正在工作,可以提供预期的结果。我遇到理解问题(上述代码)
for i,j in dict.items():
for k in j:
for value in values:
if value in k:
j.remove(value)
我不确定为什么理解不起作用。请帮助我以有效的方式解决此问题
实际结果:
{'s': None, 'd': None, 'g': None}
预期结果:
{'s': ['b'], 'd': ['d'], 'g': ['e']}
答案 0 :(得分:0)
我会将您的dict变量重命名为dict
之外的其他名称:
d = {'s': ['a','b'],'d': ['c','d'],'g': ['e','f']}
values = ['a','c','f']
只需使用列表推导即可获取values
中不在的每个列表中的项目:
d2 = {k:[i for i in v if i not in values] for k, v in d.items()}
答案 1 :(得分:0)
使用zip()
:
理解:
dict_ ={'s': ['a','b'],'d': ['c','d'],'g': ['e','f']}
values = ['a','c','f']
for (k,v), elem in zip(dict_.items(), values):
if elem in v:
v.remove(elem)
print(dict_)
使用dict-comprehension
:
这样想:
如果列表值的元素 不在 列表的值中 dict _
中的键print({k:v for (k,v), elem in zip(dict.items(), values) if elem not in v })
输出:
{'s': ['b'], 'd': ['d'], 'g': ['e']}
答案 2 :(得分:0)
与其尝试更改列表的中间迭代,不如通过遍历values
的成员来进行j
中的成员资格检查:
d ={'s': ['a','b'],'d': ['c','d'],'g': ['e','f']}
values = ['a','c','f']
list2 ={i: [a for a in j if a not in values] for i,j in d.items()}
print(list2)
{'s': ['b'], 'd': ['d'], 'g': ['e']}
作为一个旁注,我也删除了dict
变量名称,因为它隐藏了内置变量。绝对要避免这种情况,因为以后您可能会遇到一些卑鄙的行为:
dict = {'a': 1}
d = dict([('b',2), ('c',3)])
TypeError: 'dict' object is not callable