...但是,如果开始彼此相当,我需要第二个标准来排序(如果有一个简单的方法来做到这一点,那将解决一切)
有一个简单的方法来这样做:use a tuple for each item's key。由于元组比较将较早的项目视为更重要,因此只有在较早的项目匹配时才会考虑后面的项目。
例如,给定的项目有两个数字,其中排序应在第一(更显著)数量上升和在第二下降列表:
>>> data = [
... (1, 0),
... (1, 1),
... (1, 2),
... (0, 0),
... (2, 0),
... ]
>>> data.sort(key=lambda (a, b): (a, -b))
>>> data
[(0, 0), (1, 2), (1, 1), (1, 0), (2, 0)]
我忘记一些重要的事情。对于第二个标准,这不是一个简单的大于/小于个案。它是沿着如果start ==“具体”,返回-1
使用您的特殊值的元组的后项是将他们变成一个简单的<,==的方式,或>比较线:
def ticket_key(ticket):
start = ticket["start"]
if start == "specific":
second = -1
else:
second = ticket["blah"]
return (start, second)
tickets.sort(key=ticket_key)
现在对于项目的门票收入[“开始”]是“具体”,-1是用来代替车票[“嗒嗒”]:
>>> data = [
... {"start": "specific"}, # "blah" doesn't even exist here
... {"start": "specific", "blah": 2},
... {"start": "42", "blah": 1},
... {"start": "42", "blah": 0},
... ]
>>> data.sort(key=ticket_key)
>>> data
[{'start': '42', 'blah': 0},
{'start': '42', 'blah': 1},
{'start': 'specific'},
{'start': 'specific', 'blah': 2}]
你应该添加有关排序标准更多信息你需要。解决方案应该像'key = lambda x:...' –