카운터를 값별로 정렬하는 방법- 비단뱀
역목록 이해의 리스트 컴플리션을 하는 것 외에 카운터를 값별로 정렬하는 방법이 있습니까?이 경우 이보다 더 빠릅니다.
>>> from collections import Counter
>>> x = Counter({'a':5, 'b':3, 'c':7})
>>> sorted(x)
['a', 'b', 'c']
>>> sorted(x.items())
[('a', 5), ('b', 3), ('c', 7)]
>>> [(l,k) for k,l in sorted([(j,i) for i,j in x.items()])]
[('b', 3), ('a', 5), ('c', 7)]
>>> [(l,k) for k,l in sorted([(j,i) for i,j in x.items()], reverse=True)]
[('c', 7), ('a', 5), ('b', 3)
다음 방법을 사용하면 항목이 정렬됩니다.
>>> from collections import Counter
>>> x = Counter({'a':5, 'b':3, 'c':7})
>>> x.most_common()
[('c', 7), ('a', 5), ('b', 3)]
가장 효율적인 방법으로 모든 값이 아닌 Top N을 요구하면heapq
스트레이트 정렬 대신 다음과 같이 사용됩니다.
>>> x.most_common(1)
[('c', 7)]
카운터 밖에서 정렬은 항상 다음과 같은 기준에 따라 조정할 수 있습니다.key
기능하다.sort()
그리고.sorted()
둘 다 입력 시퀀스를 정렬할 값을 지정할 수 있는 콜 가능.sorted(x, key=x.get, reverse=True)
와 같은 분류를 할 수 있습니다.x.most_common()
단, 다음과 같이 키만 반환합니다.
>>> sorted(x, key=x.get, reverse=True)
['c', 'a', 'b']
또는 지정된 값만 기준으로 정렬할 수 있습니다.(key, value)
쌍:
>>> sorted(x.items(), key=lambda pair: pair[1], reverse=True)
[('c', 7), ('a', 5), ('b', 3)]
@MartijnPieters의 답변에 대한 좋은 추가 사항은 발생별로 정렬된 사전을 다시 찾는 것입니다.Collections.most_common
는 태플만 반환합니다.나는 종종 이것을 편리한 로그 파일의 json 출력과 결합한다.
from collections import Counter, OrderedDict
x = Counter({'a':5, 'b':3, 'c':7})
y = OrderedDict(x.most_common())
출력:
OrderedDict([('c', 7), ('a', 5), ('b', 3)])
{
"c": 7,
"a": 5,
"b": 3
}
네:
>>> from collections import Counter
>>> x = Counter({'a':5, 'b':3, 'c':7})
sorted 키워드 키와 람다 함수를 사용하여 다음을 수행합니다.
>>> sorted(x.items(), key=lambda i: i[1])
[('b', 3), ('a', 5), ('c', 7)]
>>> sorted(x.items(), key=lambda i: i[1], reverse=True)
[('c', 7), ('a', 5), ('b', 3)]
이것은 모든 사전에서 작동합니다.하지만Counter
에는 이미 정렬된 항목(가장 빈번한 항목에서 가장 적은 항목까지)을 제공하는 특수 기능이 있습니다.라고 합니다.most_common()
:
>>> x.most_common()
[('c', 7), ('a', 5), ('b', 3)]
>>> list(reversed(x.most_common())) # in order of least to most
[('b', 3), ('a', 5), ('c', 7)]
표시할 항목 수를 지정할 수도 있습니다.
>>> x.most_common(2) # specify number you want
[('c', 7), ('a', 5)]
보다 일반적인 분류, 즉key
키워드는 정렬 방식을 정의합니다.숫자 타입이 내림차순임을 나타내기 전에 빼기:
>>> x = Counter({'a':5, 'b':3, 'c':7})
>>> sorted(x.items(), key=lambda k: -k[1]) # Ascending
[('c', 7), ('a', 5), ('b', 3)]
언급URL : https://stackoverflow.com/questions/20950650/how-to-sort-counter-by-value-python
'programing' 카테고리의 다른 글
파일을 전송하기 위해 PHP를 사용할 때 다운로드를 다시 시작할 수 있습니까? (0) | 2023.01.21 |
---|---|
for loop 동안 목록 엔트리를 수정하려면 어떻게 해야 합니까? (0) | 2023.01.21 |
Java에서 2배에서 정수로 변환 (0) | 2023.01.01 |
테이블 형식 없이 SQL 쿼리 결과 가져오기 (0) | 2023.01.01 |
Python에서 다양한 날짜로 반복 (0) | 2023.01.01 |