Python: Понимание лямбды, используемой в Sorted () [duplicate]

1

Я пытался использовать модуль orderedDict для сортировки моего словаря, но придумал этот вопрос, глядя на примерный код, как показано ниже:

# regular unsorted dictionary
d = {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2}

# dictionary sorted by key
OrderedDict(sorted(d.items(), key=lambda t: t[0]))
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])

# dictionary sorted by value
OrderedDict(sorted(d.items(), key=lambda t: t[1]))
OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])

Итак, что меня смутило в коде, это функция Лямбда, используемая внутри функции sorted(). Я понимаю, что 't' - это аргумент, и 't [0]' или 't [1]' являются выражением, но не могут определить, как 't' получить назначенное значение внутри sorted(). В коде кажется, что 't = d.items()' происходит автоматически?

Пожалуйста, помогите мне разобраться в этом механизме и спасибо за это!

Теги:
lambda

1 ответ

1
Лучший ответ

Прежде всего, обратите внимание, что лямбда - это удобный способ определения регулярной функции, как любой другой. Этот код:

sorted(d.items(), key=lambda t: t[0])

функционально эквивалентен этому:

def get_first(t):
    return t[0]

sorted(d.items(), key=get_first)

Вы передаете функцию для sorted (а не результат ее вызова). sorted принимает эту функцию и передает ей значение, когда это необходимо.

Например, sorted может быть наивно определена следующим образом:

def sorted(original_values, KEY):
    values = list(original_values)  # create a copy
    n = len(values)
    for j in range(n):
        for k in range(n - 1):
            if KEY(values[k]) > KEY(values[k + 1]):  # <----------
                values[k], values[k + 1] = values[k + 1], values[k]
    return values

Параметр KEY - это функция, которая используется в строке со стрелкой для сравнения двух значений, чтобы увидеть, нужно ли их обменивать.

  • 0
    sorted принимает эту функцию и передает ей значение всякий раз, когда это необходимо, - это та часть, которую я не понимаю ... Это просто происходит за сценой, и нам действительно не нужно знать, как это работает? Я использую Python для анализа данных.
  • 0
    Может быть, это просто грамматическая гончая, но лямбда не совсем то же самое. 'Similair' да, точно так же, особенно по объему .. нет
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню