2009-06-18 2 views
6

가능한 중복 : 내가 파이썬 dictonary있는 경우
Python dictionary: are keys() and values() always the same order?Dict는 동일한 순서로 키와 값을 반환합니까?

가 .keys .values와 같은 순서에서 해당 요소를 반환?

예. 그것은 반환의 키에 대해서는

foo = {'foobar' : 1, 'foobar2' : 4, 'kittty' : 34743} 

:

>>> foo.keys() 
['foobar2', 'foobar', 'kittty'] 

지금 foo.values ​​()가 해당 키와 같은 순서로 항상 요소를 반환합니다?

답변

17

그것은 Python documentation 개선하기 어렵다 :

키와 값이 비 무작위 파이썬 구현에 걸쳐 다양하고, 삽입과 삭제의 사전의 역사에 따라 임의의 순서로 나열되어 있습니다. items(), keys(), values(), iteritems(), iterkeys()itervalues()이 사전에 개입하지 않고 호출되면 목록은 직접적으로 일치합니다. 이것은 zip(): pairs = zip(d.values(), d.keys()).을 사용하여 (value, key) 쌍을 생성 할 수 있습니다. iterkeys()itervalues() 방법에 대해 동일한 관계가 유지됩니다. pairs = zip(d.itervalues(), d.iterkeys())은 쌍에 대해 동일한 값을 제공합니다. 같은 목록을 생성하는 또 다른 방법은 keys()values()에 전화로 전화 사이에 사전을 수정해서는 안주의로, "예"짧은에, 그래서 pairs = [(v, k) for (k, v) in d.iteritems()]

입니다.

+0

완벽 한 그런 바보. 나는 그 중요한 요점을 완전히 놓쳤다. :( – UberJumper

1

네,이

그냥 Python doc에서 문서를 볼 수 있습니다 :

키와 값이 비 무작위 파이썬 구현에 걸쳐 다양하고, 사전의에 따라 임의의 순서로 나열되어 있습니다 삽입 및 삭제의 역사. item(), keys(), values ​​(), iteritems(), iterkeys() 및 itervalues ​​()가 사전에 개입하지 않고 호출되면 목록이 직접 대응합니다. 할

가장 좋은 dict.items() 파이썬 2.6 문서에서

1

를 사용하는 여전히 :

키와 값이 비 무작위 임의의 순서로 나열되어 있습니다, 파이썬 구현에 따라 다르며 사전의 삽입 및 삭제 내역에 따라 달라집니다. items(), keys(), values(), iteritems(), iterkeys()itervalues()이 사전에 개입하지 않고 호출되면 목록은 직접적으로 일치합니다. 이렇게하면 zip(): pairs = zip(d.values(), d.keys())을 사용하여 (값, 키) 쌍을 만들 수 있습니다.동일한 관계가 iterkeys()itervalues() 방법에 적용됩니다. pairs = zip(d.itervalues(), d.iterkeys())은 쌍에 대해 동일한 값을 제공합니다. 같은 목록을 만드는 또 다른 방법은 pairs = [(v, k) for (k, v) in d.iteritems()]입니다.

99 % 이상은 Python 3.0에서도 마찬가지입니다.

+0

Python 3.0에 대해 추측 할 필요가 없습니다. 설명서는 http://docs.python.org/3.0/library/stdtypes.html#dictionary-view-objects and affirmative에 있습니다. –

관련 문제