문제

키를 기준으로 사전을 정렬하고 클래스의 재정의된 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

이 접근 방식은 수동으로 새 목록을 만들고 새 값을 추가하는 것보다 개념적으로 조금 더 깔끔하며 정렬 논리를 제어할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top