2016-07-25 1 views
0

이 같은 설정에 사전 반복하는 파이썬 방법은 무엇입니까 : 만 a의 모든 값을 통해 루프를 반복하기를 원한다면반복 처리가

dict = {'a': [1, 2, 3], 'b': [3, 4, 5], 'c': 6} 

b을 건너 뛰고 c을 건너 뜁니다. 이이 문제를 해결하는 백만 가지 방법이 분명히 있어요 그러나 나는 같은 것을 방지하기 위해 선호하는 것 : 당신은이 작업을 수행 할 itertools 모듈에서 chain을 사용할 수 있습니다

del dict['c'] 
for k,v in dict.iteritems(): 
    pass 
+0

만약 값이 iterable입니까? – Julien

+0

나는 누군가가 이런 종류의 문제에 대한 영리한 트릭을 가지고 있기를 희망했다. – Rob

+0

어떻게 더 영리 할 수 ​​있을까? – Julien

답변

2

보다 일반적인 방법은 발생기 표현의 끝에서 if 바꾸어 필터와 같은 방법을 사용하고있다. 당신이 hasattr와 필터링, 모든 반복 가능한 값을 반복하려면

:

invalid = set(['c', 'd']) 
for key in (k for k in dict if key not in invalid): 
    .... 

당신 경우 :

for key in (k for k in dict if hasattr(dict[k], '__iter__')): 
    for item in dict[key]: 
     print(item) 

을 일부 키를 제외 할 경우, 필터 '하지에서 "사용 특정 키만 선택하려면 "in"필터를 사용하십시오.

valid = set(['a', 'b']) 
for key in (k for k in dict if key in valid): 
    .... 
1

: 같은 파괴적인 뭔가의

for each in dict['a']: 
    # do something 
    pass 
for each in dict['b']: 
    # do something 
    pass 

In [29]: from itertools import chain 

In [30]: mydict = {'a': [1, 2, 3], 'b': [3, 4, 5], 'c': 6} 

In [31]: for item in chain(mydict['a'], mydict['b']): 
    ...:  print(item) 
    ...:   
1 
2 
3 
3 
4 
5 

list 인 사전의 키 값은 단지을 사용하십시오.

wanted_key = ['a', 'b']   
for item in chain.from_iterable(mydict[key] for key in wanted_key if isinstance(mydict[key], list)): 
    # do something with the item 
2

SSDMS의 것과 비슷합니다. 당신은 또한 할 수 있습니다 :

mydict = {'a': [1, 2, 3], 'b': [3, 4, 5], 'c': 6} for each in mydict['a']+mydict['b']: ....