programing

카운터를 값별로 정렬하는 방법- 비단뱀

luckcodes 2023. 1. 1. 12:19

카운터를 값별로 정렬하는 방법- 비단뱀

역목록 이해의 리스트 컴플리션을 하는 것 외에 카운터를 값별로 정렬하는 방법이 있습니까?이 경우 이보다 더 빠릅니다.

>>> 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)]

자세한 내용은 Python 정렬 방법을 참조하십시오.

@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