Ответ 1
Вы близки. Вы можете отсортировать список с помощью sorted
[docs] и взять первые пять элементов:
newA = dict(sorted(A.iteritems(), key=operator.itemgetter(1), reverse=True)[:5])
Смотрите также: Python Sorting HowTo
У меня есть такой словарь:
A = {'a':10, 'b':843, 'c': 39,.....}
Я хочу получить 5 максимальных значений этого dict и сохранить новый dict с этим. Чтобы получить максимальное значение, которое я сделал:
max(A.iteritems(), key=operator.itemgetter(1))[0:]
Возможно, это непростая задача, но я долго задерживаюсь на ней. Пожалуйста, помогите!!!
Вы близки. Вы можете отсортировать список с помощью sorted
[docs] и взять первые пять элементов:
newA = dict(sorted(A.iteritems(), key=operator.itemgetter(1), reverse=True)[:5])
Смотрите также: Python Sorting HowTo
Не нужно использовать iteritems и itemgetter. Метод dict собственного get отлично работает.
max(A, key=A.get)
Аналогично для сортировки:
sorted(A, key=A.get, reverse=True)[:5]
Наконец, если размер dict неограничен, использование кучи будет в конечном счете быстрее, чем полный вид.
import heapq
heapq.nlargest(5, A, key=A.get)
Для получения дополнительной информации см. документацию heapq
.
Вы можете использовать collections.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}
Попробуйте следующее:
dict(sorted(A.iteritems(), key=operator.itemgetter(1), reverse=True)[:5])
Для Python 3
import operator
dict(sorted(A.items(), key=operator.itemgetter(1), reverse=True)[:5])