2013-01-08 4 views
0

일치하는 속성을 가진 dicts의 목록에서 항목을 제거내가 예를 들어 dicts의 목록을 가지고

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

remove_ids = [3,4] 

그래서 나는 단지와 listremove_ids을 적용하고 결국 싶습니다

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을 사용할 수 있습니다. data이 큰 또는 매우 자주 이렇게하면

remove_ids = (3, 4) 
filtered_data = filter(lambda item: item['id'] not in remove_ids, 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으로 간주됩니다. –

관련 문제