如何在Python上的字典上对值进行排序?

时间:2018-12-31 19:46:48

标签: python sorting dictionary key

这是我目前拥有的字典:

{"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 :(得分: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代码,然后稍加修改(只需添加一行),以便修改两个列表。您可以使用的另一种收集类型是元组,但由于它们是不可变的,因此会更加棘手。

相关问题