idlist = ['101', '102']
myd = [
{'id':'101', 'role': 'tester'},
{'id':'102', 'role': 'tester'},
{'id':'103', 'role': 'tester'}
]
- 我有
idlist
- 我需要检查具有id的字典是否存在于
myd
- 我需要删除具有匹配id 的项目预期输出:
101和102被删除
[{'id':'103', 'role': 'tester'}]
代码在
下面for ids in idlist:
for each in myd.items():
if ids == each['id']
del each
我需要做2 for循环函数来解决这个问题吗?
你可以使用一个简单的推导式:
s = set(idlist) # better membership test than list
myd[:] = [d for d in myd if d['id'] not in s]
从头构建列表通常比反复删除元素要好。切片赋值myd[:] = ...
只是确保这是对现有列表对象的一个突变,就像删除元素一样。
一行字:
myd = [x for x in myd if x['id'] not in idlist]
本质上是用不在idlist中的值创建一个新列表。如果您想覆盖它,可以将它分配给myd
。
注意:这不是从列表中删除,而是替换列表。