파이썬 사전 : 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()
사전에 전혀 개입의 수정이라고, 목록은 직접 대응됩니다.
그렇습니다. 관심 사항이 변경되지 않으면 keys (), values () 및 items () 반환 목록이 합당한 순서로 실제로 보장 된 속성입니다. iterkeys () & c도 해당 목록과 동일한 순서로 반복됩니다.
예, 그것은 파이썬 2.x에서 보장됩니다 :
사전을 수정하지 않고 키, 값 및 항목보기를 반복하는 경우 항목 순서가 직접 일치합니다.
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
예. CPython 3.6부터 사전 은 삽입 한 순서대로 항목을 리턴합니다 .
이것이 구현 세부 사항이라고 말하는 부분은 무시하십시오. 이 동작은 CPython 3.6에서 보장 되며 Python 3.7로 시작하는 다른 모든 Python 구현에 필요 합니다 .
문서에 대한 좋은 참고 자료. 설명서 / 구현에 관계없이 주문을 보장하는 방법은 다음과 같습니다.
k, v = zip(*d.iteritems())
다른 dicts를 사용할 때도 내 보낸 값의 순서가 동일하게 유지되기를 원했기 때문에 이러한 답변에 만족하지 못했습니다.
여기서는 키 순서를 미리 지정하고, dict가 변경 되더라도 다른 값을 사용하더라도 반환 된 값은 항상 동일한 순서를 갖습니다.
keys = dict1.keys()
ordered_keys1 = [dict1[cur_key] for cur_key in keys]
ordered_keys2 = [dict2[cur_key] for cur_key in keys]
'IT' 카테고리의 다른 글
괄호와 함께 URL을 전달하여 컬 (0) | 2020.03.22 |
---|---|
Linus Torvalds는 Git이 절대로 파일을 추적하지 않는다고 할 때 무엇을 의미합니까? (0) | 2020.03.22 |
SQL Server에서 테이블 변수와 임시 테이블을 언제 사용해야합니까? (0) | 2020.03.22 |
왜 항상 컴파일러 경고를 활성화해야합니까? (0) | 2020.03.22 |
Amazon S3에서 버킷을 공개합니다. (0) | 2020.03.22 |