繁体   English   中英

Python:从列表中删除字典,给定要删除的键列表

[英]Python: remove dictionary from list, given list of keys to remove

我有一个扩展问题, 要从列表中删除字典 ,除了我有一个要从列表中删除的字典键列表之外。

所以,我有这样的事情:

a=[{'id': 1, 'name': 'paul'},{'id': 2, 'name': 'john'},{'id': 3, 'name': 'john2'},{'id': 4, 'name': 'johnasc'}]

现在,我有一个del_list,像这样:

del_id_list=[2,4]

a del_list删除idid字典的有效方法是什么(假设列表a为大)?

一种方法是,使用列表理解来重新创建列表(并将del_id_list声明为一set以加快查找速度):

a=[{'id': 1, 'name': 'paul'},{'id': 2, 'name': 'john'},{'id': 3, 'name': 'john2'},{'id': 4, 'name': 'johnasc'}]
del_id_list={2,4}

new_a = [d for d in a if d['id'] not in del_id_list]

结果:

[{'id': 1, 'name': 'paul'}, {'id': 3, 'name': 'john2'}]

认识过滤器

result = filter(lambda x: x['id'] not in del_id_list,a)

编辑:

关于del_id_list本身,如果很长,您可能要考虑in语句的复杂性。 也许一set ,甚至dict (任意值),效果会更好。 检查一下

编辑2:正如@Jean正确指出的那样,这是Py3中的迭代序列。 只需添加列表:

result = list(filter(lambda x: x['id'] not in del_id_list,a))
sourceList = [{'id': 1, 'name': 'paul'},{'id': 2, 'name': 'john'},{'id': 3, 'name': 'john2'},{'id': 4, 'name': 'johnasc'}]

del_id_list = [2,4]

for itemDict in sourceList:
  if itemDict['id'] in del_id_list:
    sourceList.remove(itemDict)

print(sourceList) 

Result -> [{'name': 'paul', 'id': 1}, {'name': 'john2', 'id': 3}]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM