역 목록 이해의 목록 이해를 수행하는 것 외에, 카운터를 값으로 정렬하는 pythonic 방법이 있습니까? 그렇다면 다음보다 빠릅니다.
>>> 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)
답변
Counter.most_common()
방법을 사용하면 항목 을 정렬합니다 .
>>> from collections import Counter
>>> x = Counter({'a':5, 'b':3, 'c':7})
>>> x.most_common()
[('c', 7), ('a', 5), ('b', 3)]
가능한 가장 효율적인 방식으로 수행합니다. 모든 값 대신 Top N을 요청하면 a 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(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)]
답변
