Python 从字典列表中删除键值对

Python 从字典列表中删除键值对,python,list-comprehension,Python,List Comprehension,我有一个字典列表,例如: [{'mykey1':'myvalue1', 'mykey2':'myvalue2'}, {'mykey1':'myvalue1a', 'mykey2':'myvalue2a'}] 我需要从键等于mykey1的所有字典中删除所有键值对。我可以通过循环使用del语句来实现这一点,但我想知道如何使用list comprehensions或lambdas创建一个新的列表,它将删除所有键为mykey1的键值对 非常感谢 def new_dict(old_dict):

我有一个字典列表,例如:

[{'mykey1':'myvalue1', 'mykey2':'myvalue2'}, {'mykey1':'myvalue1a', 'mykey2':'myvalue2a'}]
我需要从键等于mykey1的所有字典中删除所有键值对。我可以通过循环使用del语句来实现这一点,但我想知道如何使用list comprehensions或lambdas创建一个新的列表,它将删除所有键为mykey1的键值对

非常感谢

def new_dict(old_dict):
    n = old_dict.copy()
    n.pop('mykey1',None)
    return n

new_list_of_dict = map(new_dict,list_of_dict)

我没有使用
del
,而是选择了
dict.pop
,因为
pop
会在键不存在的情况下抑制
KeyError


如果你真的只想得到某些关键点,这会变得容易一些

from operator import itemgetter
tuple_keys = ('key1','key2','key3')
get_keys = itemgetter(*tuple_keys)
new_dict_list = [ dict(zip(tuple_keys,get_keys(d)) for d in old_dict_list ] 
如果键不在旧目录中,则会引发
KeyError

或:

如果
不在旧目录中,它还将添加
键:无
。如果您不希望该
,可以执行以下操作:

new_dict_list = [ dict( (k,d[k]) for k in tuple_keys if k in d) for d in old_dict_list ]

根据包含/排除词典的百分比和词典的大小,这可能比@MartijnPieters的解决方案略快。

如果您确实想使用列表理解,请将其与dict理解相结合:

[{k: v for k, v in d.iteritems() if k != 'mykey1'} for d in mylist]
如果您使用的是python 3,请将
.items()
替换为
.items()

在python 2.6及以下版本上,您应该使用:

[dict((k, v) for k, v in d.iteritems() if k != 'mykey1') for d in mylist]

由于只有在Python2.7和3中才引入了dict理解语法
{key:value…}
[d.pop('mykey1',None)for d in list]

在Python3.5上,这是成功的 ''结果是我的列表记录''


您可以执行以下简单步骤:

arr = [{'mykey1':'myvalue1', 'mykey2':'myvalue2'}, {'mykey1':'myvalue1a', 'mykey2':'myvalue2a'}]

for i in arr:
    del i["mykey1"]

print(arr)

输出:

[{'mykey2': 'myvalue2'}, {'mykey2': 'myvalue2a'}] 

如果您使用的是python2.6或更老版本,请使用
dict((k,v)替换d.iteritems()中的k,v,如果k!=“mykey1”)
。@mgilson如果我的条件是k应该在特定元组中,则可以执行:{dict((k,v)替换k,v在d.iteritems()中,如果k在mytuple中)}是吗?因为当我这样做时,我得到:unhabable type:'dict'@dublintech:您使用了错误的语法;它是围绕着整体的方括号,而不是大括号:
[dict((k,v)表示d中的k,v.iteritems()如果k在mytuple中)表示mylist中的d]
。mytuple中的
k表达式很好。这会修改旧列表和字典,新列表将只包含删除的值。如果需要保留原始值,则不是最佳解决方案,并且列表理解不会产生任何有用的结果……除非它满足OP的要求,只是修改了原文?那为什么还要用列表呢?生成这个列表没有任何意义,只是消耗了不必要的内存和CPU时间,更不用说让未来的维护人员感到困惑了。
[{key: value for key, value in dict.items() if key != 'EQUITY'} for dict in result]
arr = [{'mykey1':'myvalue1', 'mykey2':'myvalue2'}, {'mykey1':'myvalue1a', 'mykey2':'myvalue2a'}]

for i in arr:
    del i["mykey1"]

print(arr)

[{'mykey2': 'myvalue2'}, {'mykey2': 'myvalue2a'}]