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"
}
]
答案 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'}]