5 максимальных значений в словаре Python - PullRequest
49 голосов
/ 26 августа 2011

У меня есть словарь, подобный следующему:

A = {'a':10, 'b':843, 'c': 39,.....}

Я хочу получить 5 максимальных значений этого dict и сохранить новый dict с этим.Чтобы получить максимальное значение, которое я сделал:

max(A.iteritems(), key=operator.itemgetter(1))[0:]

Возможно, это легкая задача, но я застрял в ней надолго.Пожалуйста, помогите !!!

Ответы [ 5 ]

92 голосов
/ 26 августа 2011

Нет необходимости использовать iteritems и itemgetter.Собственный метод get в dict работает нормально.

max(A, key=A.get)

Аналогично для сортировки:

sorted(A, key=A.get, reverse=True)[:5]

Наконец, если размер dict неограничен, использование кучи в конечном итоге будет быстрее, чем полная сортировка.

import heapq
heapq.nlargest(5, A, key=A.get)

Для получения дополнительной информации ознакомьтесь с документацией heapq .

.
53 голосов
/ 26 августа 2011

Вы рядом.Вы можете отсортировать список, используя sorted [документы] и взять первые пять элементов:

newA = dict(sorted(A.iteritems(), key=operator.itemgetter(1), reverse=True)[:5])

См. Также: Как сортировать Python

37 голосов
/ 07 апреля 2014

Вы можете использовать collection.Counter здесь:

dict(Counter(A).most_common(5))

Пример:

>>> from collections import Counter
>>> A = {'a' : 1, 'b' : 3, 'c' : 2, 'd' : 4, 'e' : 0, 'f' :5}
>>> dict(Counter(A).most_common(5))
{'a': 1, 'c': 2, 'b': 3, 'd': 4, 'f': 5}
3 голосов
/ 26 августа 2011

Попробуйте это:

dict(sorted(A.iteritems(), key=operator.itemgetter(1), reverse=True)[:5])
1 голос
/ 23 мая 2019

Для Python 3

import operator
dict(sorted(A.items(), key=operator.itemgetter(1), reverse=True)[:5])
...