2013-01-08 88 views
0

我有一个实例类型的字典列表中删除从类型的字典列表项:具有匹配属性

data = [ 
    { 'id': 1 }, 
    { 'id': 2 }, 
    { 'id': 3 }, 
    { 'id': 4 }, 
    { 'id': 5 }, 
] 

remove_ids = [3,4] 

所以我想申请remove_idslist,最终只:

list = [ 
    { 'id': 1 }, 
    { 'id': 2 }, 
    { 'id': 5 }, 
] 

我想沿着线的东西:

data.remove([item (if item['id'] in remove_ids) for k, item in data]) 

显然,这并不工作,但我我很想知道我是否接近。我也有兴趣看看这是否可能是一条线。

回答

2
data = [d for d in data if d['id'] not in remove_ids] 
+0

赢家1秒!谢谢:) – DanH

2
new_data=[x for x in data if x['id'] not in remove_ids] 
2

你可以使用filter

remove_ids = (3, 4) 
filtered_data = filter(lambda item: item['id'] not in remove_ids, data) 

如果data是大还是你这样做很频繁,你可能会得到有利于出itertools

from itertools import ifilterfalse 
remove_ids = (3, 4) 
filtered_data = tuple(ifilterfalse(lambda item: item['id'] in remove_ids, data)) 
+0

有趣。我真的需要让自己的头靠近拉姆达,它仍然会破坏我的大脑。 – DanH

+0

请注意,直列表理解和生成器通常被认为是更多Pythonic。 –

相关问题