如何删除列表中的整个字典?

时间:2017-09-27 18:28:28

标签: python dictionary list-comprehension dictionary-comprehension

mylist = [{"a" : 1, " b" : 2}, {"c" : 1, "d" :2}]

我的清单是这样的。如何删除包含密钥的整个字典' a'?

3 个答案:

答案 0 :(得分:5)

您可以使用列表理解创建一个新列表,其中包含'a' s而不包含>>> mylist = [{"a" : 1, " b" : 2},{"c" : 1, "d" :2}] >>> [d for d in mylist if 'a' not in d] [{'c': 1, 'd': 2}] 密钥:

>>> mylist = [{"a" : 1, " b" : 2},{"c" : 1, "d" :2}]

#                           v Iterate over the copy of the list,
#                           v    so that the change in index after the 
#                           v    deletion of  elements in the list won't 
#                           v    impact the future iterations
>>> for i, d in enumerate(list(mylist)):
...     if 'a' in d:
...         del mylist[i]
...
>>> mylist
[{'c': 1, 'd': 2}]

如果必须从原始列表中删除元素,那么您可以执行以下操作:

{{1}}

答案 1 :(得分:3)

你在评论中说过

  

我是python中的初学者,我希望移动缓慢并随时了解

因此,我专注于解释步骤,而不是立即向您提供解决方案。

检查一个字典是否包含特定密钥的最简单方法是使用in

>>> d = {'a': 10, 'b': 20}
>>> 'a' in d
True

>>> 'c' in d
False

同样,您可以检查它是否不是not in字典中的密钥:

>>> 'c' not in d
True

>>> 'b' not in d
False

由于您正在处理字典列表,因此需要对其进行迭代。使用Python,您可以使用for迭代每个元素:

>>> list_of_dicts = [{'a': 10, 'b': 20}, {'b': 10, 'c': 20}]
>>> for subdict in list_of_dicts:
...     print(subdict)
... 
{'a': 10, 'b': 20}
{'b': 10, 'c': 20}

所以你基本上只需要将for循环与检查密钥是否为in的子句。但是,修改当前正在迭代的内容并不是一个好主意,因此您可以创建一个新列表来存储您想要保留的词典:

>>> keep_these = []
>>> for subdict in list_of_dicts:
...     if 'a' not in subdict:
...         keep_these.append(subdict)
...
>>> keep_these
[{'b': 10, 'c': 20}]

在Python中有一种更简单的方法:列表理解。 Moinuddin Quadri已经提出了它,但只是重复一遍:

>>> [subdict for subdict in list_of_dicts if 'a' not in subdict]
[{'b': 10, 'c': 20}]

这与我上面使用的for循环完全一样,但它更短更快。

答案 2 :(得分:1)

您还可以使用filter来解决此问题:

mylist = [{"a" : 1, " b" : 2}, {"c" : 1, "d" :2}]
new_list = list(filter(lambda x: "a" not in x, mylist))

输出:

[{'c': 1, 'd': 2}]

关于您最近的评论,删除值为" apple":

的词典
mylist = [{"a" : "apple", "b" : "orange"}, {"c" : "pineapple", "d" : "mango"}]
final_list = list(filter(lambda x:"apple" not in x.values(), mylist))