从dict python列表中删除所有出现的内容

从dict python列表中删除所有出现的内容,python,list,numpy,dictionary,scipy,Python,List,Numpy,Dictionary,Scipy,我有以下代码: >>> my_list = [ ... {'key1': 1, 'key2': 1., 'key3': 'a'}, ... {'key1': 0, 'key2': 0., 'key3': 'b'} ... ] >>> 我需要从我的_列表中删除所有出现的键(即“键2”): >>> my_list = [ ... {'key1': 1, 'key3': 'a'}, ... {'key1': 0,

我有以下代码:

>>> my_list = [
...     {'key1': 1, 'key2': 1., 'key3': 'a'},
...     {'key1': 0, 'key2': 0., 'key3': 'b'}
... ]
>>> 
我需要从我的_列表中删除所有出现的键(即“键2”):

>>> my_list = [
...     {'key1': 1, 'key3': 'a'},
...     {'key1': 0, 'key3': 'b'}
... ]
>>> 
做这件事的最具python风格和更快的模式是什么

附加说明:“my_list”实际上是一个包含更多行的列表,每个dict都有几十个键

for my_dict in my_list:
    my_dict.pop('key2', None)
您也可以使用
del
删除键,但除非您确定每个字典中都有该键,否则您需要明确检查该键是否存在:

for my_dict in my_list:
   if 'key2' in my_dict:
       del my_dict['key2']
或:


最后一段代码是“Pythonic”原则的一个例子,即“请求原谅比允许更容易”,这意味着人们应该优先处理异常,而不是提前做工作,以防止它们发生。但是,这不是一个很好的原则示例,因为在本例中,它更多的是代码,在清晰性方面没有明显的好处。

与大多数列表、字典和python一样,
.pop()
是从数据对象中删除项的最佳方法

要从每个字典中删除特定键,请使用
for
循环遍历字典列表,并使用
.pop()
(使用要删除的键的参数,并使用
None
返回)删除键

for dictionary in list_of_dictionaries:
    dictionary.pop(key_you_want_to_pop, None)
有关详细信息,请参阅


祝你好运,编码愉快

如果您喜欢一行,您可以使用
map

map(lambda d: d.pop('key2', None), my_list)

有几种方法可以做到这一点。例如,使用列表理解:

my_list = [{'key3': 'a', 'key2': 1.0, 'key1': 1}, {'key3': 'b', 'key2': 0.0, 'key1': 0}]

my_new_list = [{y[0]:y[1] for y in x.items() if y[0] != "key2"} for x in my_list]
要使用此方法删除密钥列表(创建新列表),请执行以下操作:

注意:OP接受了这个答案;最有可能的原因是,在编写本文时,它是唯一可以从列表中删除多个键的键。但是,此解决方案创建新词典并将其添加到新列表中;它不会修改原始列表。如果您想保留原始列表,这是非常好的,但是它肯定比修改列表要慢。在我的笔记本电脑上进行了一些粗略的
timeit
测试,结果显示
pop
ping在
for
循环中的速度比这个答案中的解决方案快3-3.5倍


始终为工作选择正确的工具

这两个
my_list
s之间有什么区别?我看不到。那么期望的结果是什么呢?感谢zegkljan在描述中被修复了。关于py2/3差异的注释:在3中,在地图被消耗之前,这将不会起任何作用。@Francesco:是的,正如你所评论的,我正在处理这个问题。正如我所解释的,它的优点是说明了一般的pythonic原则,但我认为这一原则在这个特殊情况下不是很有说服力。好的,谢谢,但是如果我想删除一个键列表,例如:
keys\u to\u remove=['key2','key5']
最具pythonic风格的方法是什么?(不使用两个for循环)。谢谢@格桑切斯:我不想对“pythonic”的定义太过纠结,但在我看来,最好的写作方法是使用两个循环。如果您不是在修改现有的数据结构,而是在创建新的数据结构,就像jDo的回答一样,那么其他方法可能会更好。
my_list = [{'key3': 'a', 'key2': 1.0, 'key1': 1}, {'key3': 'b', 'key2': 0.0, 'key1': 0}]

my_new_list = [{y[0]:y[1] for y in x.items() if y[0] != "key2"} for x in my_list]
my_new_list = [{y[0]:y[1] for y in x.items() if y[0] not in ["key2", "key3"]} for x in my_list]