在Python3中无需解包元组参数即可编写清晰的排序键

在Python3中无需解包元组参数即可编写清晰的排序键,python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,假设我有一个集合events,其中包含长度为2的元组,用于存储一些任意信息,例如一天和一个事件 在Python2中,我可以编写非常可读的 sortkey = lambda (day, event): some_function(day) events_sorted = sorted(events, key=sortkey) 在Python3中,第一行将引发一个SyntaxError,因为tuple参数unpacking已被删除。我不能使用两个参数的lambda函数作为键,所以我必须使用可读性差

假设我有一个集合
events
,其中包含长度为2的元组,用于存储一些任意信息,例如一天和一个事件

在Python2中,我可以编写非常可读的

sortkey = lambda (day, event): some_function(day)
events_sorted = sorted(events, key=sortkey)
在Python3中,第一行将引发一个
SyntaxError
,因为tuple参数unpacking已被删除。我不能使用两个参数的lambda函数作为键,所以我必须使用可读性差得多的函数

sortkey = lambda day_and_event: some_function(day_and_event[0])

有更好的方法吗?

使用两行函数而不是
lambda
表达式:

def sortkey(day_and_event):
    day, event = day_and_event
    return some_function(day)

我希望能有一种不那么冗长且仍然可读的方式,但恐怕不行。我想到的另一件事是使用
名为tuple
,并执行
一些函数(day和event.day)
,但这需要(可能不可能)更改
events
集合,抱歉。嗯。。。你还在寻找什么样的解决方案?如果您想将任何其他逻辑添加到
sortkey
函数中,您无论如何都必须使其适应某个函数。就我个人而言,lambda的语法一直让我感到困惑,
lambda(day,event):
看起来它需要两个参数对应一个元组。您的解决方案就是PEP 3113中提供的解决方案,恐怕这是唯一的方法(没有像Tadhg的方法那样将其移动到函数)。