2014-12-18 2 views
2

사전 값을 필터링하고 싶습니다.사전 필터 값

d1 = {'a': 0, 'b': 0, 'c': 8, 'd': 7} 

무엇을해야할까요?

d={} 

for k,v in d1.items(): 
    if v>0: 
     d[k]=v 

필자는 동일한 재 활성화 필터를 사용할 수 없습니다.

filter(..) 

이렇게하려면 어떤 멋진 방법이 있습니까?

답변

8

당신은 당신이

>>> {key: value for key, value in d1.items() if value > 0} 
{'c': 8, 'd': 7} 

주처럼 dict.items()을 사용할 수 있습니다이

>>> {key: d1[key] for key in d1 if d1[key] > 0} 
{'c': 8, 'd': 7} 

처럼 필터링 된 값으로 사전을 만들려면 사전 이해를 사용할 수 있습니다 dict.iteritems()를 사용하면 더 많은 메모리 될 것입니다 파이썬 2.7에서 효율적으로 사용할 수 있습니다. dict.items()은 모든 키 - 값 쌍을 가진 튜플 목록을 생성합니다. 당신의 의도는 단지 0을있는 값을 제거하는 경우

, 당신은 당신의 요구 사항을 fullfill에이

>>> {key: value for key, value in d1.items() if value} 
{'c': 8, 'd': 7} 
+0

감사합니다! 당신의 대답을 위해. 나는 그것을 유효한 답으로 표시 할 수있을 때까지 약간의 시간을 기다려야한다.) – user3378649

0

필터 기능 방법처럼이 단축 될 수 있습니다.

def f(x): 
    return x[1]>0 
d1 = {'a': 0, 'b': 0, 'c': 8, 'd': 7} 
filter(f, d1.items()) 

아니면 람다 함수를 사용하여, 다음과 같이, 그것은 간단하다 :

filter(lambda x:x[1]>0, d1.items())