这是我目前拥有的字典:
{"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]
从这里开始,我不知道如何将我的值分配回字典。我该怎么办?谢谢(-:
答案 0 :(得分:3)
3.6 +:
dict(sorted(list(d.items()), key=lambda p: p[1], reverse=True)[:3])
使用<3.6:
import collections
collections.OrderedDict(sorted(list(d.items()), key=lambda p: p[1], reverse=True)[:3])
答案 1 :(得分:1)
其他选项:
from heapq import nlargest
res = nlargest(3, h.items(), key=lambda x: x[1])
#=> [('992832', 89.0), ('823482', 80.0), ('214123', 75.0)]
要转换回字典,请执行以下操作:
{ k[0]: k[1] for k in res } #=> {'992832': 89.0, '823482': 80.0, '214123': 75.0}
答案 2 :(得分:0)
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}
答案 3 :(得分:0)
字典在Python中没有固定的顺序。每次您调用字典时,元素的顺序都可能与前一个调用不同。您可能会发现使用2个列表会更容易-其中一个用于键,一个用于值,其中对应的键和值位于同一索引。轻微的缺点是您将必须手动编写排序功能,以便它可以同时修改两个列表,但是此操作很简单。您可以在线找到最快的mergesort代码,然后稍加修改(只需添加一行),以便修改两个列表。您可以使用的另一种收集类型是元组,但由于它们是不可变的,因此会更加棘手。