Как отсортировать значения в диктонарном на Python? - PullRequest
0 голосов
/ 31 декабря 2018

Это словарь, который у меня есть на данный момент:

{"214123" : 75.0,
 "153525" : 60.0,
 "734829" : 40.0,
 "992832" : 89.0,
 "823482" : 80.0}

Я хочу отсортировать значения в словаре по убыванию, а после этого показывать только первые 3 значения.

Ожидаетсявывод:

{"992832" : 89.0,
 "823481" : 80.0,
 "214123" : 75.0}

Я использую Python 3.0, и мой текущий код:

prices = []
data[listing_id] = price
for listing, price in data.items():
    prices.append(price)
    prices.sort(reverse=True)
    top3 = prices[0:2]

Отсюда я не знаю, как присвоить мои значения обратно словарю.Что я должен делать?Спасибо (-:

Ответы [ 4 ]

0 голосов
/ 01 января 2019

Другой вариант:

from heapq import nlargest

res = nlargest(3, h.items(), key=lambda x: x[1])
#=> [('992832', 89.0), ('823482', 80.0), ('214123', 75.0)]

Для преобразования обратно в dict:

{ k[0]: k[1] for k in res } #=> {'992832': 89.0, '823482': 80.0, '214123': 75.0}
0 голосов
/ 31 декабря 2018
d={"214123" : 75.0,
 "153525" : 60.0,
 "734829" : 40.0,
 "992832" : 89.0,
 "823482" : 80.0}
sorted_d = sorted(d.items(), key=lambda x: x[1], reverse=True)
print({x:y for x,y in sorted_d[0:3]})

Выход

{'992832': 89.0, '823482': 80.0, '214123': 75.0}
0 голосов
/ 31 декабря 2018

Словари не имеют фиксированного порядка в Python.Каждый раз, когда вы вызываете словарь, существует вероятность того, что порядок элементов отличается от предыдущего вызова.Возможно, вам будет проще использовать 2 списка - один для ключей и один для значений, где соответствующие ключи и значения имеют одинаковый индекс.Небольшой недостаток состоит в том, что вам придется вручную кодировать функцию сортировки, чтобы она одновременно изменяла оба списка, но это легко исправить.Вы можете найти код слияния (самый быстрый) в сети и затем слегка его изменить (вам нужно добавить только одну строку), чтобы он модифицировал оба списка.Другой тип коллекции, который вы можете использовать, - это кортежи, но это будет сложнее, так как они неизменны.

0 голосов
/ 31 декабря 2018

С 3,6 +:

dict(sorted(list(d.items()), key=lambda p: p[1], reverse=True)[:3])

С <3,6: </p>

import collections

collections.OrderedDict(sorted(list(d.items()), key=lambda p: p[1], reverse=True)[:3])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...