[python] 파이썬 사전 : keys ()와 values ​​()는 항상 같은 순서입니까?

사전에 의해 리턴 된 목록 keys()values()사전의 메소드는 항상 일대일 맵핑입니다 (사전이 2 개의 메소드 호출간에 변경되지 않는다고 가정).

예를 들면 다음과 같습니다.

>>> d = {'one':1, 'two': 2, 'three': 3}
>>> k, v = d.keys(), d.values()
>>> for i in range(len(k)):
    print d[k[i]] == v[i]

True
True
True

calling keys()와 calling 사이에서 사전을 변경하지 않으면 values()위의 for-loop가 항상 True로 인쇄된다고 가정하는 것이 잘못입니까? 이를 확인하는 문서를 찾을 수 없습니다.



답변

이것을 찾았습니다 :

경우 items(), keys(), values(),
iteritems(), iterkeys(),와
itervalues()사전에 전혀 개입의 수정이라고, 목록은 직접 대응됩니다.

2.X 문서3.X 문서 .


답변

그렇습니다. 관심 사항이 변경되지 않으면 keys (), values ​​() 및 items () 반환 목록이 합당한 순서로 실제로 보장 된 속성입니다. iterkeys () & c도 해당 목록과 동일한 순서로 반복됩니다.


답변

예, 그것은 파이썬 2.x에서 보장됩니다 :

사전을 수정하지 않고 키, 값 및 항목보기를 반복하는 경우 항목 순서가 직접 일치합니다.


답변

예. CPython 3.6부터 사전 은 삽입 한 순서대로 항목을 리턴합니다 .

이것이 구현 세부 사항이라고 말하는 부분은 무시하십시오. 이 동작은 CPython 3.6에서 보장 되며 Python 3.7로 시작하는 다른 모든 Python 구현에 필요 합니다 .


답변

문서에 대한 좋은 참고 자료. 설명서 / 구현에 관계없이 주문을 보장하는 방법은 다음과 같습니다.

k, v = zip(*d.iteritems())


답변

http://docs.python.org/dev/py3k/library/stdtypes.html#dictionary-view-objects 에 따르면 dict의 keys (), values ​​() 및 items () 메소드는 해당 반복자를 반환합니다. 해당합니다. 그러나 같은 것에 대한 python 2.x 공식 문서에 대한 참조를 찾을 수 없습니다.

내가 알 수있는 한, 대답은 그렇습니다. 그러나 파이썬 3.0 이상에서만


답변

가치가있는 것으로, 내가 작성한 일부 중고 프로덕션 코드는이 가정을 기반으로하며 문제가 없었습니다. 나는 그것이 사실이 아니라는 것을 안다 🙂

위험을 감수하고 싶지 않다면 iteritems ()를 사용하십시오.

for key, value in myDictionary.iteritems():
    print key, value