현재 파이썬 3.6 내장 딕셔너리 명령을 받게됩니다
희소식이므로, 고유 한 문자열 ID를 키로, 숫자 값을 내장 된 Python v3.6 + dict로 데이터베이스에서 검색 한 OP의 원래 매핑 쌍 사용 사례는 이제 삽입 순서를 존중해야합니다.
데이터베이스 쿼리에서 결과로 나온 두 개의 열 테이블 표현식이 다음과 같은 경우 :
SELECT a_key, a_value FROM a_table ORDER BY a_value;
k_seq 및 v_seq (숫자 색인으로 정렬되고 물론 동일한 길이로 정렬 됨)라는 두 개의 Python 튜플에 저장됩니다.
k_seq = ('foo', 'bar', 'baz')
v_seq = (0, 1, 42)
ordered_map = dict(zip(k_seq, v_seq))
나중에 다음과 같이 출력하도록 허용하십시오.
for k, v in ordered_map.items():
print(k, v)
이 경우 새로운 파이썬 3.6+ 내장 dict!
foo 0
bar 1
baz 42
v의 값당 동일한 순서로
Python 3.5에서 내 컴퓨터의 설치 위치는 현재 다음과 같습니다.
bar 1
foo 0
baz 42
세부:
Raymond Hettinger가 2012 년에 제안한대로 ( " Python-dev의 메일은 "더 빠른 반복이 포함 된 더 컴팩트 한 사전 "참조 ), 이제 (2016 년) Victor Stinner의 메일에서 "Python 3.6 dict의 제목은 python 3.6 dict이됩니다. Python 3.6에서 문제 27350 "Compact and ordered dict" 의 수정 / 구현으로 인해 키워드가 정렬되었습니다. " 이제 삽입 순서를 유지하기 위해 내장 dict를 사용할 수 있습니다 !!
바라건대 이것은 첫 번째 단계로 얇은 계층 OrderedDict 구현으로 이어질 것입니다. @ JimFasarakis-Hilliard가 지적했듯이 일부는 앞으로도 OrderedDict 유형의 사용 사례를 참조하십시오. 필자는 파이썬 커뮤니티가 시간의 시험을 견딜 수 있는지, 다음 단계는 무엇인지 신중하게 검사 할 것이라고 생각합니다.
다음과 같은 안정적인 순서로 열린 가능성을 놓치지 않도록 코딩 습관을 재고 할 시간입니다.
첫 번째는 함수 및 메소드 구현시 디스패치를 용이하게하기 때문입니다.
두 번째는 dict
파이프 라인 처리에서 s를 중간 저장소로 보다 쉽게 사용하도록 권장합니다 .
Raymond Hettinger 는 자신의 샌프란시스코 Python Meetup 그룹 프레젠테이션 2016-DEC-08에서 " The Python Behind Python 3.6 사전 "을 설명하는 문서를 친절하게 제공 했습니다.
그리고 아마도 꽤 많은 Stack Overflow 장식 질문 및 답변 페이지가이 정보의 변형을 수신 할 것이며 많은 고품질 답변은 버전 별 업데이트도 필요합니다.
Caveat Emptor (아래 업데이트 2017-12-15 참조) :
@ajcr은 올바로 언급했듯이 "이 새로운 구현의 순서 유지 측면은 구현 세부 사항으로 간주되며 의존해서는 안됩니다." ( Whatsnew36에서 ) nit picking이 아니라 인용이 약간 비관적이었습니다. "(이것은 미래에 변경 될 수 있지만, 현재 및 미래의 모든 파이썬 구현에 대한 순서 보존 의미론을 요구하도록 언어 스펙을 변경하기 전에 몇 가지 릴리스에 대해 언어로이 새로운 dict 구현을 갖는 것이 바람직합니다. "임의의 반복 순서가 여전히 유효한 이전 버전의 언어 (예 : Python 3.5)와의 하위 호환성을 유지하는 데 도움이됩니다."
따라서 일부 인간 언어 (예 : 독일어)에서와 같이, 사용법은 언어를 형성하며, 의지는 이제 whatsnew36 에서 선언되었습니다 .
2017-12-15 업데이트 :
Guido van Rossum 은 python-dev list 로 보낸 메일에서 다음과 같이 선언했습니다.
그렇게 만들어. "사전 삽입 순서 유지"는 판결입니다. 감사!
따라서 dict 삽입 순서의 버전 3.6 CPython 부작용은 이제 언어 사양의 일부가되었습니다 (더 이상 구현 세부 사항이 아님). 이 메일 쓰레드는 또한 collections.OrderedDict
토론 중에 Raymond Hettinger가 상기 한 것처럼 독특한 디자인 목표를 보여 주었습니다.