2017-03-20 4 views
1

OrderedDict를 역순으로 반복하고 싶습니다.python OrderedDict에서 키의 역순으로 반복 *하는 방법?

e.e. 의 순서 리버스 :

for k, v in list(my_ordered_dict.iteritems())[::-1]: 
    # < do stuff > 

모든 아이디어는 어떻게 더 잘 만들 수 :

for k, v in my_ordered_dict.iteritems(): 
    # < do stuff > 

지금까지 내가 목록을 반대로하여, 비 게으른 버전을받은거야? 당신은 DICT에 reversed를 사용하는 경우

+0

시도 http://stackoverflow.com/a/3221487/461887 – sayth

+0

@sayth, 그 다른 질문 – yuval

+0

''게으른되지 않습니다) (역 - 그것은'iterable'은 전체 반환하는 평가 필요 역순으로,'for k, v in reversed (my_ordered_dict.iteritems())'는 당신이 할 수있는 최선의 방법입니다. – AChampion

답변

3

는 게으르게 평가해야한다 :

이 작업을 수행하는 방법
for k, v in ((k, my_ordered_dict[k]) for k in reversed(my_ordered_dict)): 
    ..... 

?

여기서 핵심 요소는 느리게 평가되는 generator expression입니다. 따라서 이렇게하면 순서가 지정된 명령문의 키를 느리게 평가 한 다음 필요한 경우 tuple 키와 dict 값을 반환합니다. 파이썬 3에서

dict.items() 지금이다하고 게으르게 평가 :

는 난 단지 파이썬 3를 지원해야합니다. 파이썬 2.7이 viewitems() 방법을 않지만

for k, v in reversed(my_ordered_dict.items()): 

파이썬 2.7 OrderedDict 조회수 reversed 필요 비 순서를 반대로하는 __reversed__ 후크를 지원하지 않습니다 따라서 상기에 단순화 될 수있다.

+1

이렇게하면'for k, v in reverse (my_ordered_dict.items()) :? – maxymoo

+0

파이썬 3에서 그렇습니다 ... –

+0

그리고 왜 'k, v가 역순 (my_ordered_dict.iteritems())'이 Py2에서 작동하지 않습니까? – AChampion

-1

값의 범위 내에서 값의 수를 뺄 수 있습니다.

items = my_ordered_dict.iteritems() 
max_index = len(items) 

for i in range(max_index): 
    object = items[max_index - i - 1]