使用匹配的属性从dicts列表中删除项目

时间:2013-01-08 14:47:17

标签: python list dictionary

我有一个dicts列表,例如:

data = [
    { 'id': 1 },
    { 'id': 2 },
    { 'id': 3 },
    { 'id': 4 },
    { 'id': 5 },
]

remove_ids = [3,4]

所以我想将remove_ids应用于list,最后只能:

list = [
    { 'id': 1 },
    { 'id': 2 },
    { 'id': 5 },
]

我正在思考以下几点:

data.remove([item (if item['id'] in remove_ids) for k, item in data])

显然这不起作用,但我很想知道我是否接近。我也有兴趣看看这是否可能是一行。

3 个答案:

答案 0 :(得分:2)

new_data=[x for x in data if x['id'] not in remove_ids]

答案 1 :(得分:2)

data = [d for d in data if d['id'] not in remove_ids]

答案 2 :(得分:2)

您可以使用filter

remove_ids = (3, 4)
filtered_data = filter(lambda item: item['id'] not in remove_ids, data)

如果data很大或您经常这样做,您也可能会从itertools中获益。

from itertools import ifilterfalse
remove_ids = (3, 4)
filtered_data = tuple(ifilterfalse(lambda item: item['id'] in remove_ids, data))