用Python 3x排序的Lambda函数



我在SO上看到过类似的问题和答案,但我很难理解如何应用它。

我正在尝试将以下Python 2x代码移植到Python 3x:

deals = sorted([DealData(deal) for deal in deals],
lambda f1, f2: f1.json_data['time'] > f2.json_data['time]

我看到了使用cmp_to_key函数的建议,但我无法使其工作。我错过了什么?

这是我对CMP_to_key:的尝试

deals = sorted(DealData, key=functools.cmp_to_key(cmp=compare_timestamps))

def compare_timestamps(x,y):
return x.json_data['timeStamp'] > y.json_data['timeStamp']

我收到以下错误:cmp_to_key((缺少必需的参数"mycmp"(pos1(

对于在python 3中排序的对象,您需要告诉它要使用对象中的哪个键来排序

deals = sorted(
[DealData(deal) for deal in deals],
key=lambda deal_data: deal_data.json_data["time"]
)

只有当您有一个现有的比较函数,即:时,才需要cmp_to_key

from functools import cmp_to_key
def compare_deals(d1, d2):
if d1.json_data["time"] > d2.json_data["time"]:
return 1
if d1.json_data["time"] < d2.json_data["time"]:
return -1
# equal
return 0
deal = sorted(
[DealData(deal) for deal in deals],
key=cmp_to_key(compare_deals)
)

python文档中的Sorting How To提供了更多示例。

最新更新