删除列表字典中的元素

时间:2019-04-01 14:52:37

标签: python list dictionary dictionary-comprehension

我正在研究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']}

3 个答案:

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