我在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提供了更多示例。