从python列表中删除对象

usr*_*_11 0 python dictionary list

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

b = [15,17]
Run Code Online (Sandbox Code Playgroud)

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

输出清单:

[
    {
        "id" : 15,
        "name" : "abc"
    },
    {
        "id" : 17,
        "name" : "pqr"
    }
]
Run Code Online (Sandbox Code Playgroud)

cs9*_*s95 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]
Run Code Online (Sandbox Code Playgroud)

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

a = [i for i in a if i['id'] in c]
Run Code Online (Sandbox Code Playgroud)

print(a)
[{'id': 15, 'name': 'abc'}, {'id': 17, 'name': 'pqr'}]
Run Code Online (Sandbox Code Playgroud)

  • 我更喜欢`reverse(range(len(a)))`而不是`range(len(a) - 1,-1,-1)` (4认同)