사전에 의해 리턴 된 목록 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()
사전에 전혀 개입의 수정이라고, 목록은 직접 대응됩니다.
답변
그렇습니다. 관심 사항이 변경되지 않으면 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