Без импорта вы можете сделать это следующим образом:
>>> n = 2
>>> mydict = {'a': 5, 'b': 3, 'c': 4}
>>> {key: mydict[key] for key in sorted(mydict, key=mydict.get, reverse=True)[:n]}
{'a': 5, 'c': 4}
список понимание является эквивалентом из этого:
result = {}
for key in sorted(mydict, key=mydict.get, reverse=True)[:n]:
result.update({key: mydict[key]})
Если несколько ключей имеют одинаковое значение, и вы хотите разбить правило n наибольшее, вам необходимо использовать set
.
>>> mydict = {'a': 5, 'b': 3, 'c': 4, 'd': 4}
>>> {key: value for key, value in mydict.items() if value in sorted(set(mydict.values()), reverse=True)[:2]}
{'a': 5, 'c': 4, 'd': 4}
Вы также можете получить nlargest
dict.values()
и связанные с ним ключи, используя Dict понимание.
>>> import heapq
>>> n = 2
>>> mydict = {'a': 5, 'b': 3, 'c': 4}
>>> {key: value for key, value in mydict.items() if value in heapq.nlargest(n, mydict.values())}
{'a': 5, 'c': 4}
Мне нравится ваш путь, но я не хочу его в одной строке – CAVS
@ КАВС счастлив сейчас? :) – styvane
Что делать, если у меня есть несколько ключей с высокими значениями? mydict = {'a': 5, 'b': 3, 'c': 4, 'd': 4}, а число равно 2, я хочу получить {'a': 5, 'c': 4 , 'd': 4} – CAVS