Как лучше всего урезать словарь после сортировки? - PullRequest
0 голосов
/ 15 мая 2018

Я хочу уменьшить количество элементов в словаре.Поэтому мне нужно обрезать словарь после сортировки по значению.У меня вопрос как?

Так что я должен урезать этот дикт, чтобы были сохранены только две верхние записи -

base_dic={'Cs':0,5, 'Cp':0.3, 'Os':0.6, 'Op': 0.9}

Я пробовал -

dict(sorted(base.items(), key=lambda x: x[1], reverse=True)[:2])

Но это лучший способ?И чтобы отобразить или сравнить значения в словаре, есть ли умный способ упорядочения по значению?Обратите внимание, что это не просто сортировка значений, это сортировка словаря по значениям.

Я хочу иметь только несколько элементов с максимальными значениями.То есть от

base={'Cs':0,5, 'Cp':0.3, 'Os':0.6, 'Op': 0.9, .... 100 elements}  

до таких, как

base={'Op': 0.99, 'Nid': 0.97}

Эффективно сохраняя только верхние ДВЕ элемента и отбрасывая остальные.

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Да, это более или менее очевидный способ сделать это.Вы могли бы стремиться избавиться от лямбды для более чистого решения, используя base_dic.get.

keys = sorted(base_dic.keys(), key=base_dic.get, reverse=True)[:2]
trim_dict = {k : base_dic[k] for k in keys}
0 голосов
/ 15 мая 2018

То, что вы предлагаете, безусловно, питонное.Единственная проблема, которую я вижу, состоит в том, что вам нужны только два самых больших элемента, но все же нужно отсортировать все кортежи в dict: это можно сделать более эффективно с помощью heapq.nlargest

values = dict(heapq.nlargest(2, mydict.items(), lambda i: i[1]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...