2013-01-08 85 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。 –

相關問題