Лямбда-функция с сортировкой по Python 3x - PullRequest
0 голосов
/ 07 мая 2020

Я видел похожие вопросы и ответы по 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)

1 Ответ

2 голосов
/ 07 мая 2020

Для sorted in python 3 вам нужно указать, какой ключ в объекте использовать для сортировки

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

cmp_to_key требуется только в том случае, если у вас есть существующая функция сравнения ie:

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)
)

В Sorting How To в документации python есть больше примеров.

...