데이터베이스의 두 필드(문자열 필드와 숫자 필드)에서 읽은 값 사전이 있습니다. 문자열 필드는 고유하므로 사전의 키입니다.
키를 기준으로 정렬할 수 있지만 값을 기준으로 정렬하려면 어떻게 해야 합니까?
참고: 여기에서 스택 오버플로 질문을 읽었습니다 . 사전 값으로 사전 목록을 정렬하려면 어떻게 합니까? 그리고 아마도 사전 목록을 갖도록 내 코드를 변경할 수 있지만 사전 목록이 실제로 필요하지 않기 때문에 오름차순 또는 내림차순으로 정렬하는 더 간단한 솔루션이 있는지 알고 싶었습니다.
파이썬 3.7 이상 또는 CPython 3.6
Dict는 Python 3.7 이상에서 삽입 순서를 유지합니다. CPython 3.6에서도 동일하지만 구현 세부 사항 입니다.
>>> x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
>>> {k: v for k, v insorted(x.items(), key=lambda item: item[1])}
{0: 0, 2: 1, 1: 2, 4: 3, 3: 4}
음, 실제로 "사전 값으로 정렬"하는 것이 가능합니다. 최근에 나는 코드 골프(스택 오버플로 질문 코드 골프: 워드 빈도 차트 )에서 그렇게 해야 했습니다. 요약하자면, 문제는 다음과 같은 종류였습니다. 텍스트가 주어지면 각 단어가 나타나는 빈도를 계산하고 빈도가 감소하는 순서로 정렬된 상위 단어 목록을 표시합니다.
단어를 키로 사용하고 각 단어의 발생 횟수를 값으로 사용하여 사전을 구성하면 다음과 같이 단순화됩니다.
from collections import defaultdict
d = defaultdict(int)
for w in text.split():
d[w] += 1
그런 다음 사용 빈도에 따라 정렬된 단어 목록을 얻을 수 있습니다. sorted(d, key=d.get)- 정렬은 단어 발생 횟수를 정렬 키로 사용하여 사전 키를 반복합니다.
for w insorted(d, key=d.get, reverse=True):
print(w, d[w])
나는 사람들이 "나는 키로 사전을 쉽게 정렬할 수 있지만 값으로 정렬하는 방법"이 무엇을 의미하는지 설명하기 위해 이 자세한 설명을 작성했습니다. 그리고 솔루션은 위와 같이 값을 기반으로 일종의 키 목록을 수행하는 것입니다.
다음을 사용할 수 있습니다.
sorted(d.items(), key=lambda x: x[1])
이렇게 하면 사전 내의 각 항목 값을 기준으로 사전을 가장 작은 것에서 가장 큰 것 순으로 정렬합니다.