我有一个字典列表,例如:
[{'mykey1':'myvalue1', 'mykey2':'myvalue2'}, {'mykey1':'myvalue1a', 'mykey2':'myvalue2a'}]
我需要从键等于 mykey1 的所有字典中删除所有键值对。我可以通过循环和使用 del 语句来做到这一点,但我想知道如何使用列表推导或 lambdas 创建一个新列表,它只会删除键为 mykey1 的所有键值对。
非常感谢
我有一个字典列表,例如:
[{'mykey1':'myvalue1', 'mykey2':'myvalue2'}, {'mykey1':'myvalue1a', 'mykey2':'myvalue2a'}]
我需要从键等于 mykey1 的所有字典中删除所有键值对。我可以通过循环和使用 del 语句来做到这一点,但我想知道如何使用列表推导或 lambdas 创建一个新列表,它只会删除键为 mykey1 的所有键值对。
非常感谢
如果您真的想使用列表推导,请将其与字典推导结合起来:
[{k: v for k, v in d.iteritems() if k != 'mykey1'} for d in mylist]
如果您使用的是 python 3,请替换.iteritems()
。.items()
在 python 2.6 及更低版本上,您应该使用:
[dict((k, v) for k, v in d.iteritems() if k != 'mykey1') for d in mylist]
因为{key: value ...}
dict 理解语法仅在 Python 2.7 和 3 中引入。
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)
或者
new_list_of_dict = [ new_dict(d) for d in 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.get(k,None)) for k in tuple_keys ) for d in old_dict_list ]
key:None
如果key
不在旧字典中,它也会添加。如果你不想要那个None
,你可以这样做:
new_dict_list = [ dict( (k,d[k]) for k in tuple_keys if k in d) for d in old_dict_list ]
根据您包含/排除的字典百分比和字典的大小,这可能比@MartijnPieters 的解决方案略快。
[d.pop('mykey1', None) for d in list]
在 python 3.5 上这工作成功'''结果是我的列表字典'''
[{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'}]