поиск лучших k самых больших ключей в словаре python

Допустим, у меня есть словарь:

{key1:value1........... keyn:valuen} 

Так что скажем, я хочу написать функцию

 def return_top_k(dictionary, k): return list_of_keys_sorted 

Каков наиболее эффективный способ (с точки зрения большого О) получить ключи, которые имеют верхние значения k (поддерживая порядок, т. Е. Самый старший ключ значения присутствует в начале .. и т. Д.).

5 Solutions collect form web for “поиск лучших k самых больших ключей в словаре python”

O(n log k) :

 import heapq k_keys_sorted = heapq.nlargest(k, dictionary) 

Вы можете использовать key параметр key слова, чтобы указать, что следует использовать в качестве ключа сортировки, например:

 k_keys_sorted_by_values = heapq.nlargest(k, dictionary, key=dictionary.get) 
 return sorted(dictionary, key=dictionary.get, reverse=True)[:10] 

Должно быть в худшем O(NlogN) (хотя heapq предложенный другими, вероятно, лучше) …

Возможно, имеет смысл использовать Counter вместо обычного словаря. В этом случае метод most_common будет делать (примерно) то, что вы хотите ( dictionary.most_common(10) ), но только если имеет смысл использовать Counter в вашем API.

Для топ-3 шаг за шагом:

 >>> from operator import itemgetter >>> dct = {"a": 1, "b": 2, "c": 3, "d": 4, "e": 5} >>> sorted(dct.items(), key=itemgetter(1), reverse=True) [('e', 5), ('d', 4), ('c', 3), ('b', 2), ('a', 1)] >>> map(itemgetter(0), sorted(dct.items(), key=itemgetter(1), reverse=True)) ['e', 'd', 'c', 'b', 'a'] >>> map(itemgetter(0), sorted(dct.items(), key=itemgetter(1), reverse=True))[:3] ['e', 'd', 'c'] 

Или используя модуль heapq

 >>> import heapq >>> heapq.nlargest(3, dct.items(), key=itemgetter(1)) [('e', 5), ('d', 4), ('c', 3)] >>> map(itemgetter(0), _) ['e', 'd', 'c'] 

В коде

 dct = {"a": 1, "b": 2, "c": 3, "d": 4, "e": 5} k = 3 print sorted(dct.keys(), reverse=True)[:k] 

Если вам также нужны значения:

 print sorted(dct.items(), reverse=True)[:k] 

Или если вы хотите использовать OrderedDict :

 from collections import OrderedDict d = OrderedDict(sorted(dct.items(), reverse=True)) print d.keys()[:k] 
 portfolio = [ {'name': 'IBM', 'shares': 100, 'price': 91.1}, {'name': 'AAPL', 'shares': 50, 'price': 543.22}, {'name': 'FB', 'shares': 200, 'price': 21.09}, {'name': 'HPQ', 'shares': 35, 'price': 31.75}, {'name': 'YHOO', 'shares': 45, 'price': 16.35}, {'name': 'ACME', 'shares': 75, 'price': 115.65} ] cheap = heapq.nsmallest(3, portfolio, key=lambda s: s['price']) expensive = heapq.nlargest(3, portfolio, key=lambda s: s['price']) 
  • Как прерывать цикл импорта в python
  • Как проверить, запущен ли я на Windows в Python?
  • Как вы НЕ автоматически разыгрываете db.ReferenceProperty в Google App Engine?
  • Python: универсальные получатели и сеттеры
  • Удалить конечный символ из строки (Python)
  • Метаклассы и __slots__?
  • из . импорт XXXX
  • Что такое быстрый питонический способ глубокого копирования только данных из файла или списка python?
  •  
    Interesting Posts for Van-Lav

    Что можно сделать, чтобы ускорить этот декоратор воспоминаний?

    Понимание для сглаживания последовательности последовательностей?

    Python – печатать список строк CSV в выровненных столбцах

    Отладчик Pycharm работает на Ubuntu, но не на Windows для идентичного кода

    Связывание проблем с Anaconda при использовании LD_LIBRARY_PATH

    В чем разница между json.dump () и json.dumps () в python?

    Как удалить пустые строки с пробелами или без них в Python

    Pandas reindex `method` kwag не работает с столбцами?

    Вызвать метод родительского класса из дочернего класса в Python?

    Как определить код ответа HTTP-ответа и установить прокси-сервер соответственно в scrapy?

    Запустить скрипт python в IPython с встроенными / встроенными графиками

    Выбор встроенного языка

    Мне нужно, чтобы Selenium открывал веб-браузер в большем разрешении (желательно максимально)

    Python: найдите контурные линии из matplotlib.pyplot.contour ()

    состояние HTML после onload javascript

    Python - лучший язык программирования в мире.