2017-01-06 3 views
1

"children"이라는 키가있는 사전 만 보유하려면 사전 목록을 필터링해야합니다. 다음 목록의 예입니다키 기반의 파이썬 사전 목록 필터링

[{u'id': 5650, u'children': [{u'id': 4635}]}, {u'id': 5648, u'children': [{u'id': 67}, {u'id': 77}]}, {u'id': 5649}] 

가 그리고 여기에 내가 받아야 할 것입니다 :

여기
[{u'id': 5650, u'children': [{u'id': 4635}]}, {u'id': 5648, u'children': [{u'id': 67}, {u'id': 77}]}] 

내가 시도 것입니다 : 내가 얻을 무엇

dict((k, data[k]) for k in keys if k in data) 

을 그리고, 어떤 것이 좋지 않은가 :

[{u'children': [{u'id': 4635}]}, {u'children': [{u'id': 67}, {u'id': 77}]}, {}] 

실마리? 미리 감사드립니다.

답변

1
l = [{u'id': 5650, u'children': [{u'id': 4635}]}, {u'id': 5648, u'children': [{u'id': 67}, {u'id': 77}]}, {u'id': 5649}] 
d = [k for k in l if 'children' in k] 
print (d) 

출력 :

[{u'id': 5650, u'children': [{u'id': 4635}]}, {u'id': 5648, u'children': [{u'id': 67}, {u'id': 77}]}] 

중요한 라인 번째 라인 (d = ...)이다. 목록의 각 사전을 반복하고 '하위'키가 있는지 확인합니다. 있는 경우 목록에 추가됩니다. 없는 경우 건너 뜁니다.

+0

박동 20 초. ; D 그러나 당신의 대답은 좋은 설명을 포함하고 있습니다. 나는 나의 일일 투표 한도를 다 써 버리지 않았다면 그것을 업 그레 이드했다. – Tagc

3

filter() 기능을 사용할 수 있습니다. 2 개의 인수 filter(function, iterable)이 필요합니다. 함수가 리턴하는 값만 고려됩니다.

a=[{u'id': 5650, u'children': [{u'id': 4635}]}, 
    {u'id': 5648, u'children': [{u'id': 67}, {u'id': 77}]}, 
    {u'id': 5649}] 

print filter(lambda x: 'children' in x, a) 

출력 :

[{u'id': 5650, u'children': [{u'id': 4635}]}, 
{u'id': 5648, u'children': [{u'id': 67}, {u'id': 77}]}] 

filter(function, iterable)[item for item in iterable if function(item)]

3

이것은 어떻게하는 것과 같습니다?

dict_list = [{u'id': 5650, u'children': [{u'id': 4635}]}, {u'id': 5648, u'children': [{u'id': 67}, {u'id': 77}]}, {u'id': 5649}] 

filtered = [d for d in dict_list if 'children' in d] 

print(filtered) 

출력

[{'id': 5650, 'children': [{'id': 4635}]}, {'id': 5648, 'children': [{'id': 67}, {'id': 77}]}]