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)
迭代倒档,实现高效的就地删除.转换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)