Просто создайте новый словарь, используя первые N элементов (пар ключей) в (обратном) упорядоченном словаре, который у вас уже есть.Например, чтобы получить три верхних элемента, вы можете сделать что-то вроде этого:
from collections import OrderedDict
from operator import itemgetter
# create dictionary you have
dictionary = {'a': 10, 'b': 20, 'c': 30, 'd': 5}
ordered = OrderedDict(sorted(dictionary.items(), key=itemgetter(1), reverse=True))
topthree = dict(ordered.items()[:3])
print(topthree) # -> {'a': 10, 'c': 30, 'b': 20}
Для Python 3 можно использовать dict(list(ordered.items())[:3])
, поскольку items()
возвращает итератор в этой версии.В качестве альтернативы вы можете использовать dict(itertools.islice(ordered.items(), 3))
, который будет работать как в Python 2, так и в 3.
Также обратите внимание, что результатом является просто обычный словарь - как вы указали в своем вопросе - не collections.Counter
или другой тип отображения,Этот подход очень общий и не требует, чтобы исходный dictionary
имел целочисленные значения - можно просто упорядочить вещи (т.е. сравнить с помощью функции key
).