__iter__에 대한 사전 정렬
-
01-07-2019 - |
문제
키를 기준으로 사전을 정렬하고 클래스의 재정의된 iter 메서드 내 값에 대한 반복자를 반환하려고 합니다.새 목록을 만들고 키를 정렬하면서 목록에 삽입하는 것보다 이 작업을 수행하는 더 훌륭하고 효율적인 방법이 있습니까?
해결책
다음과 같은 것은 어떻습니까?
def itersorted(d):
for key in sorted(d):
yield d[key]
다른 팁
지금까지 가장 쉽고 가장 빠른 접근 방식은 다음과 같습니다.
def sorted_dict(d):
keys = d.keys()
keys.sort()
for key in keys:
yield d[key]
모든 키를 가져오지 않으면 정렬할 수 없습니다.모든 키를 목록으로 가져온 다음 해당 목록을 정렬하는 것이 가장 효율적인 방법입니다.목록 정렬은 매우 빠르며, 이와 같은 키 목록을 가져오는 속도는 최대한 빠릅니다.그런 다음 새 값 목록을 생성하거나 예제와 같이 값을 생성할 수 있습니다.dict를 반복하는 경우(다음 반복이 실패함) dict를 수정할 수 없으므로 sorted_dict()의 결과가 완료되기 전에 dict를 수정하려면 목록을 반환하도록 만드세요. .
def sortedDict(dictobj):
return (value for key, value in sorted(dictobj.iteritems()))
그러면 단일 중간 목록이 생성되고 'sorted()' 메서드는 실제 목록을 반환합니다.그러나 적어도 그것은 단 하나입니다.
기본 정렬 순서를 원한다고 가정하면 sorted(list) 또는 list.sort()를 사용할 수 있습니다.자신만의 정렬 논리를 원하는 경우 Python 목록은 전달한 함수를 기반으로 정렬하는 기능을 지원합니다.예를 들어, 다음은 함수를 사용하여 숫자를 최소에서 최대(기본 동작)로 정렬하는 방법입니다.
def compareTwo(a, b):
if a > b:
return 1
if a == b:
return 0
if a < b:
return -1
List.Sort(compareTwo)
print a
이 접근 방식은 수동으로 새 목록을 만들고 새 값을 추가하는 것보다 개념적으로 조금 더 깔끔하며 정렬 논리를 제어할 수 있습니다.