[英]Complex sort dictionary into sorted list
我有以下课程:
class SalesRecord:
name = ''
dollarsSpent = 0
itemsPurchased = 0
itemsSold = 0
position = 0
我也有一个字典,该字典由这些SalesRecords一堆组成,并以SalesRecord.name作为键。 如何使用以下条件将值排序到排序列表中(假设所有内容都是整数):
同样,只是好奇,但是这样的总体运行时间是多少? 在最坏的情况下是否需要迭代4次?
使用复合键。
sorted((k, v) for (k, v) in somedict, key=lambda (k, v):
(-v.dollarsSpent, -(v.itemsPurchased - v.itemsSold),
-v.itemsPurchased, v.position))
您有两个选择。 这两个选项都在线性运算时间O(nlog(n))
,但您可能会认为它更具可读性。 您可以使用复合排序键:
def sortkey(salesrecord):
r = salesrecord
return (
-r.dollarsSpent,
-r.itemsPurchased + r.itemsSold,
-r.itemsPurchased,
r.position
)
sorted(salesdict.values(), key=sortkey)
或多次排序,具体取决于排序算法的稳定性:
l = salesdict.values()
l.sort(key=lambda r: r.position)
l.sort(key=lambda r: r.itemsPurchased, reverse=True)
l.sort(key=lambda r: r.itemsPurchased - r.itemsSold, reverse=True)
l.sort(key=lambda r: r.dollarsSpent, reverse=True)
使用稳定排序 ,您可以按优先级从低到高的顺序对多个优先级不同的键进行排序。 在按优先级较高的键排序之后,保证与该键比较相等的项保持在优先级较低的键排序后的顺序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.