Фильтровать словарь и удалять самые низкие значения - PullRequest
0 голосов
/ 01 июня 2018

У меня есть словарь, как показано ниже.Есть ли способ вывести словарь с 5 самыми высокими значениями?

Если есть связи для 5-го самого высокого значения, мне нужно включить эти ключи.

Входной словарь :

{
    "1": 1,
    "12": 1,
    "13":2,
    "3": 5,
    "5":8,
    "7":3,
    "4":8,
    "10":7
}

Желаемый результат:

{
    "3": 5,
    "5":8,
    "7":3,
    "4":8,
    "10":7
}

Ответы [ 2 ]

0 голосов
/ 01 июня 2018
from  collections import Counter
dict(Counter(your_dict).most_common(5))

ВЫХОД:

{'10': 7, '3': 5, '4': 8, '5': 8, '7': 3}
0 голосов
/ 01 июня 2018

Учет связей:

val = sorted(d.values(), reverse=True)[4]
res = {k: v for k, v in d.items() if v >= val}

print(res)

{'3': 5, '5': 8, '7': 3, '4': 8, '10': 7}

Объяснение

  • Рассчитать 5-е наибольшее значение, используя sorted с reverse=True.Помните, что индексирование начинается с 0, поэтому индексируйте с [4].
  • . Используйте словарное понимание, чтобы выбрать все элементы из вашего словаря, где значение больше, чем вычисленное значение.

Оптимизация

Более эффективный метод, как указывает @Chris_Rands, заключается в использовании heapq для вычисления 5-го наибольшего значения:

import heapq

val = heapq.nlargest(5, d.values())[-1]
res = {k: v for k, v in d.items() if v >= val}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...