从python列表中删除对象

时间:2018-02-16 05:58:33

标签: python list dictionary

a = [
    {
        "id" : 15,
        "name" : "abc"
    },
    {
        "id" : 16,
        "name" : "xyz"
    },
    {
        "id" : 17,
        "name" : "pqr"
    }
]

b = [15,17]

我上面有两个列表,如果列表b中没有id,我想从列表a中删除该对象。 任何帮助,该怎么做?

输出清单:

[
    {
        "id" : 15,
        "name" : "abc"
    },
    {
        "id" : 17,
        "name" : "pqr"
    }
]

3 个答案:

答案 0 :(得分:6)

迭代倒档,实现高效的就地删除。将b转换为set以进行恒定时间查找。

c = set(b)    
for i in reversed(range(len(a))):  # thanks to @juanpa.arrivillaga for this bit 
    if a[i]['id'] not in c:
        del a[i]

否则,使用列表推导并再次创建:

a = [i for i in a if i['id'] in c]

print(a)
[{'id': 15, 'name': 'abc'}, {'id': 17, 'name': 'pqr'}]

答案 1 :(得分:0)

因此使用list comprehention:

[i for i in a if i['id']!=b[0] and i['name']!=b[1]]

答案 2 :(得分:0)

您可以按如下方式使用列表推导:

a = [
     {
        "id" : 15,
        "name" : "abc"
    },
    {
        "id" : 16,
        "name" : "xyz"
    },
    {
        "id" : 17,
        "name" : "pqr"
    }]

b = [15, 17]

print [a[_] for _ in xrange(len(a)) if a[_]["id"] in b]

<强>输出:

[{'id': 15, 'name': 'abc'}, {'id': 17, 'name': 'pqr'}]