2017-04-13 1 views
2

은 내가 중첩 사전에 내 테스트의 모든 값은 0테스트

그래서 여기가 아닌 경우 확인하려면 파이썬 3

사용 단순화 된 예 딕셔너리입니다 :

d = {'a': {'1990': 10, '1991': 0, '1992': 30}, 
    'b': {'1990': 15, '1991': 40, '1992': 0}} 

과 내가 모두 dicts 'A'와 'B'키 '1990'의 가치와 '1991'의 경우 테스트 할 것은 제로

for i in d: 
    for k in range(2): 
     year = 1990 
     year = year + k 
     if all((d[i][str(year)]) != 0): 
      print(d[i]) 
,369 없습니다 'BOOL'객체 : 형식 오류를 : A [ '1991'= 0

는하지만이 I는 전체() 함수로 동작 처음과 I 오류 코어를 얻을 수 있기 때문에 1,363,210

그렇게 만, B를 반환해야

오류가있는 반복 가능한되지 않은 모든() 라인

가 대단히 감사합니다 경우!

+0

가능한 중복 모든 기능이 작동합니까?] (http://stackoverflow.com/questions/19389490/how-do-pythons-any-and-all-functions-work) –

+0

질문을 게시하기 전에이 스레드를 살펴 보았습니다. 그러나 그것은 단지 수수께끼를 도왔습니다. 이론적으로 모든 기능이 내 요구에 맞는 연산자입니다. 하지만 어쨌든 모든 기능을 반복 할 수는 없습니다. 'TR = 모든 ((D [I] [STR (년)])! = 0) 경우 TR : 인쇄 (하지만이뿐만 아니라 작동하지 않습니다 , 내가 for 루프를 실행하여 생각 d [i])' – TDot

+0

그러면 실제 문제는 반복 가능한 내용과 전달 방법을 이해하는 것입니다. '(d [i] [str (year)])! = 0'은'bool'이므로,'all '에리스트와 같은 것을 전달해야합니다. –

답변

0

이렇게하면 dict d의 항목을 반복하는 목록 이해가 더 일반적으로 수행 될 수 있습니다. 우리 사전에서 키와 값을 반복하는 간단한 이해는 다음과 같습니다 : 위의 k에서

>>> [k for k, v in d.items()] 
['a', 'b'] 

는 키와 v 값을 포함합니다. 이해에는 if 절도 있습니다. 이 기능을 사용하면 원하지 않는 항목을 필터링 할 수 있습니다. 따라서 years = ('1990', '1991')을 정의합니다. 이제 우리는 우리의 연중 가치를 시험하기 위해 또 다른 이해를 할 수 있습니다.

>>> [d['a'][y] for y in years] 
[10, 0] 
>>> all([d['a'][y] for y in years]) 
False 

함께 전체를 붙이기 :

은 우리가 이것을 할 수있는, 이상 만 'A'반복

>>> d={'a' :{ '1990': 10, '1991':0, '1992':30},'b':{ '1990':15, '1991':40, '1992':0}} 
>>> years = ('1990', '1991') 
>>> [k for k, v in d.items() if all([v[y] for y in years])] 
['b'] 

참조 the python docs for more information on list comprehensions.

[어떻게 파이썬의 어떤의
+0

감사합니다! 더 큰 코드에서도 작동했습니다. 필자는 파이썬에 관해 많은 것을 배워야 할 것입니다. 0이 거짓이라는 것을 이해하는 데는 어느 정도 시간이 걸렸으므로 코드에서 아무런 인수도 필요하지 않습니다. 큰 코드에서 나는 범위 함수를 사용한 이유가 더 많습니다. 당신은 여전히 ​​그것들을 모두리스트 (또는 당신처럼 튜플)로 작성하는 것이 가장 좋다고 생각합니까? – TDot

+0

년이 변경되지 않는다면 괜찮을 것입니다. 데이터 구조에있는 모든 세월의 세트를 만들고 싶다면'set' 객체와'itertools' 패키지 (표준 라이브러리의 일부)에서'chain' 메소드를 사용할 수 있습니다. 그것.chain (* [d [di] .keys() in di for d]))' –

+0

이 문제가 해결되면 대답을 수락 할 수 있습니까? –