Как можно использовать лямбда-выражение для сортировки списка словарей по значению?

Лямбда-выражение можно использовать как ключ сортировки. Функция sorted() принимает аргумент key, которому можно передать лямбда-функцию, возвращающую значение, по которому нужно сортировать.

Пример:

  data = [{'name': 'Alice', 'age': 30}, {'name': 'Bob', 'age': 25}, {'name': 'Charlie', 'age': 35}]
  sorted_data = sorted(data, key=lambda item: item['age'])
  
В этом примере, lambda item: item['age'] возвращает возраст каждого словаря, который используется для сортировки.

Для сортировки списка словарей по значению с помощью лямбда-выражения в Python, используется встроенная функция sorted() или метод .sort() списка (последний изменяет исходный список). Лямбда-выражение позволяет кратко определить функцию, которая будет использоваться в качестве ключа для сортировки. Эта функция получает словарь в качестве аргумента и возвращает значение, по которому нужно сортировать.

Пример использования с sorted() (возвращает новый отсортированный список):


    data = [
        {'name': 'Alice', 'age': 30},
        {'name': 'Bob', 'age': 25},
        {'name': 'Charlie', 'age': 35}
    ]

    # Сортировка по возрасту (ключ 'age') по возрастанию
    sorted_data = sorted(data, key=lambda item: item['age'])
    print(sorted_data)
    # Вывод: [{'name': 'Bob', 'age': 25}, {'name': 'Alice', 'age': 30}, {'name': 'Charlie', 'age': 35}]


    # Сортировка по имени (ключ 'name') по возрастанию
    sorted_data_by_name = sorted(data, key=lambda item: item['name'])
    print(sorted_data_by_name)
    # Вывод: [{'name': 'Alice', 'age': 30}, {'name': 'Bob', 'age': 25}, {'name': 'Charlie', 'age': 35}]
  

Пример использования с .sort() (сортирует список на месте):


    data = [
        {'name': 'Alice', 'age': 30},
        {'name': 'Bob', 'age': 25},
        {'name': 'Charlie', 'age': 35}
    ]

    # Сортировка по возрасту (ключ 'age') по возрастанию
    data.sort(key=lambda item: item['age'])
    print(data)
    # Вывод: [{'name': 'Bob', 'age': 25}, {'name': 'Alice', 'age': 30}, {'name': 'Charlie', 'age': 35}]
  

Аргумент reverse:

Для сортировки по убыванию можно использовать аргумент reverse=True:


    data = [
        {'name': 'Alice', 'age': 30},
        {'name': 'Bob', 'age': 25},
        {'name': 'Charlie', 'age': 35}
    ]

    # Сортировка по возрасту по убыванию
    sorted_data_desc = sorted(data, key=lambda item: item['age'], reverse=True)
    print(sorted_data_desc)
    # Вывод: [{'name': 'Charlie', 'age': 35}, {'name': 'Alice', 'age': 30}, {'name': 'Bob', 'age': 25}]
  

Что важно помнить:

  • Лямбда-выражение должно возвращать значение, которое можно сравнивать (например, число, строку).
  • Если значения, по которым сортируется, могут быть разных типов или могут отсутствовать в некоторых словарях, нужно предусмотреть обработку этих случаев (например, использовать try-except или None в качестве значения по умолчанию).
  • sorted() создает новый отсортированный список, не изменяя исходный. .sort() сортирует список "на месте".
0