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

时间:2017-01-20 16:28:30

标签: python

我有一个remove dictionary from list的扩展问题,除了我有一个我想从列表中删除的字典键列表。

所以,我有类似的东西:

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

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

del_id_list=[2,4]

从[{1}}的{​​{1}}中删除a字典的有效方法(假设列表id是大的)是什么?

2 个答案:

答案 0 :(得分:2)

单向,使用列表推导重新创建列表(并将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'}]

答案 1 :(得分:0)

熟悉filter

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

编辑:

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

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

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