초기 데이터의 순서를 유지하도록 생성자를 사용하여 OrderedDict를 초기화하는 올바른 방법은 무엇입니까?
초기 데이터의 순서를 유지하도록 순서화 된 사전 (OD)을 초기화하는 올바른 방법은 무엇입니까?
from collections import OrderedDict
# Obviously wrong because regular dict loses order
d = OrderedDict({'b':2, 'a':1})
# An OD is represented by a list of tuples, so would this work?
d = OrderedDict([('b',2), ('a', 1)])
# What about using a list comprehension, will 'd' preserve the order of 'l'
l = ['b', 'a', 'c', 'aa']
d = OrderedDict([(i,i) for i in l])
질문:
는 것이다
OrderedDict
튜플 또는 목록 또는 등 목록 목록의 튜플의 튜플의 목록 또는 튜플의 순서를 유지 초기화 (2 & 3 위의 예)의 시간에 통과?OrderedDict
실제로 주문을 유지하고 있는지 확인하는 방법은 무엇입니까? adict
에 예측할 수없는 순서가 있으므로 내 테스트 벡터의 초기 순서가 예측할 수없는 사전 순서와 운 좋게 같은 경우 어떻게됩니까? 예를 들어,d = OrderedDict({'b':2, 'a':1})
라고 쓰는 대신d = OrderedDict({'a':1, 'b':2})
순서가 보존되었다고 잘못 결론을 내릴 수 있습니다. 이 경우 adict
가 알파벳순으로 정렬되어 있지만 항상 사실이 아닐 수도 있습니다. 반례를 사용하여 데이터 구조가 순서를 유지하는지 여부를 검증하는 신뢰할 수있는 방법은 무엇입니까?
PS 난 그냥 여기이 떠날거야 참조 "파이썬의 함수 호출의 의미는 패스에 있기 때문에 OrderedDict 생성자 및 업데이트 () 메소드를 모두 키워드 인수를 사용할 수 있지만, 순서가 손실됩니다 키워드 인자 정기적으로 정렬되지 않은 사전을 사용"
PPS : 앞으로 OrderedDict는 kwargs의 순서도 보존 할 것입니다 (예제 1) : http://bugs.python.org/issue16991
OrderedDict는 액세스 권한이있는 모든 순서를 유지합니다. 정렬 된 데이터를 초기화하기 위해 전달하는 유일한 방법은 마지막 두 예에서와 같이 키-값 쌍의 목록 (또는 더 일반적으로 반복 가능)을 전달하는 것입니다. 링크 한 문서에서 알 수 있듯이 OrderedDict는 OrderedDict 생성자가보기 전에 순서가 제거되므로 키워드 인수 또는 dict 인수를 전달할 때 순서에 액세스 할 수 없습니다.
마지막 예제에서 목록 이해력을 사용해도 아무것도 변경되지 않습니다. 사이에는 차이가 없습니다 OrderedDict([(i,i) for i in l])
및 OrderedDict([('b', 'b'), ('a', 'a'), ('c', 'c'), ('aa', 'aa')])
. 목록 이해력이 평가되고 목록이 생성되고 전달됩니다. OrderedDict는 그것이 어떻게 만들어 졌는지에 대해 아무것도 모릅니다.
# An OD is represented by a list of tuples, so would this work?
d = OrderedDict([('b', 2), ('a', 1)])
예, 작동합니다. 정의에 따라 목록은 항상 표시되는 방식으로 정렬됩니다. 이것은 목록 이해에도 적용됩니다. 생성 된 목록은 데이터가 제공된 것과 동일한 방식으로 제공됩니다 (즉, 목록의 소스는 결정적 set
이거나 소스가 dict
많 거나 많지 않음).
OrderedDict
실제로 주문을 유지 하는지 확인하는 방법은 무엇입니까 ? 딕셔너리에 예측할 수없는 순서가 있기 때문에 내 테스트 벡터가 딕셔너리의 예측할 수없는 순서와 운 좋게 동일한 초기 순서를 가지면 어떻게 될까요? 예를 들어,d = OrderedDict({'b':2, 'a':1})
라고 쓰는 대신d = OrderedDict({'a':1, 'b':2})
순서가 보존되었다고 잘못 결론을 내릴 수 있습니다. 이 경우 adict
가 알파벳순이라는 것을 알았지 만 항상 사실이 아닐 수도 있습니다. 즉, 카운터 예제를 사용하여 데이터 구조가 순서를 유지하는지 또는 하나가 깨질 때까지 테스트 벡터를 반복적으로 시도하는 것이 부족하지 않은지 확인하는 신뢰할 수있는 방법입니다.
참조를 위해 2- 튜플의 소스 목록을 유지하고 단위 테스트를 수행 할 때 테스트 케이스의 테스트 데이터로 사용합니다. 그것들을 반복하고 순서가 유지되는지 확인하십시오.
'programing tip' 카테고리의 다른 글
이식 가능한 클래스 라이브러리 란 무엇입니까? (0) | 2020.08.08 |
---|---|
Android에서 프로그래밍 방식으로 WEP / EAP WiFi 구성을 만들고 읽는 방법은 무엇입니까? (0) | 2020.08.08 |
Python super ()는 TypeError를 발생시킵니다. (0) | 2020.08.08 |
DOM ID에는 어떤 문자가 허용됩니까? (0) | 2020.08.08 |
Moq : 재정의 할 수없는 구성원에 대한 잘못된 설정 : x => x.GetByTitle ( "asdf") (0) | 2020.08.08 |