Рубрики
Без рубрики

Ключ сортировки списка Python

Каждый компьютерный ученый любит сортировку вещей. В этой статье я покажу вам, как вы можете изменить поведение сортировки Python по умолчанию с аргументом клавиш. Определение и использование: Чтобы настроить поведение сортировки по умолчанию метода сортировки списка .sort () и сортированного (), используйте дополнительный клавишный аргумент, передавая функцию, которая возвращает сопоставимое значение для … Python Sort Corth Подробнее »

Автор оригинала: Chris.

Каждый компьютерный ученый любит сортировку вещей. В этой статье я покажу вам, как вы можете изменить поведение сортировки Python по умолчанию с аргументом клавиш.

Определение и использование: настроить поведение сортировки по умолчанию list.sort () а также отсортировано () Метод, используйте дополнительный ключ Аргумент, передавая функцию, которая возвращает сопоставимое значение для каждого элемента в списке.

Вот краткий обзор пример, который показывает, как использовать аргументы на практике:

# Create an unsorted integer list
lst = [88, 12, 42, 11, 2]

# Sort the list in place (ascending)
lst.sort()
print(lst)
# [2, 11, 12, 42, 88]

# Sort the list (leading number)
lst.sort(key=lambda x: str(x)[0])
print(lst)
# [11, 12, 2, 42, 88]

В первой строке примера вы создаете список лишенство . Затем вы разбираетесь в списке один раз, используя поведение сортировки по умолчанию и один раз, используя индивидуальное поведение сортировки только с первой буквой номера.

Код головоломки – попробуйте сами:

Теперь вы знаете основы. Давайте углубим ваше понимание с коротким кодом головоломки – можешь решить это?

Вы также можете решить эту головоломку и отслеживать свои навыки Python на нашем интерактивном приложении Finxter.

Синтаксис : Вы можете вызвать этот метод на каждом объекте списка в Python ( Python Versions 2.x и 3.x ). Вот синтаксис:

list.sort (ключ = Никто,)

Аргументы:

ключ (По желанию. По умолчанию нет.) Передать функцию, которая принимает один аргумент и возвращает сопоставимое значение. Затем функция применяется к каждому элементу в списке. Затем сортирует метод на основе результатов ключевых функций, а не сами элементы.
задний ход (По желанию. По умолчанию false.) Порядок элементов списка. Если false, сортировка находится в порядке возрастания. Если правда, это в порядке убывания.

Статьи по Теме:

  • Методы списков Python [Обзор]
  • Синтеровка списка Python () – Окончательное руководство
  • Списки Python – все, что вам нужно знать, чтобы получить Начал

Ключ сортировки списка Python

list.sort () Метод принимает еще одну функцию как необязательный ключ Аргумент, который позволяет изменять поведение сортировки по умолчанию. Затем ключевая функция затем вызывается в элементе каждого списка и возвращает другое значение, основанное на том, на котором выполняется сортировка. Следовательно, ключевая функция принимает один аргумент ввода (элемент списка) и возвращает одно выходное значение (значение, которое можно сравнить).

Вот пример:

>>> lst = [(1,2), (3,2), (3,3), (1,0), (0,1), (4,2), (1,1), (0,2), (0,0)]
>>> lst.sort()
>>> lst
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (3, 2), (3, 3), (4, 2)]
>>> lst.sort(key=lambda x: x[0])
>>> lst
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (3, 2), (3, 3), (4, 2)]
>>> lst.sort(key=lambda x: x[1])
>>> lst
[(0, 0), (1, 0), (0, 1), (1, 1), (0, 2), (1, 2), (3, 2), (4, 2), (3, 3)]

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

Связанная статья:

  • Введение в лямбда функции в Python

Python List Сортировать ключевой лямбда

Функции лямбда – это анонимные функции, которые не определены в пространстве имен (у них нет имен). В его простейшей форме синтаксис:

лямбда аргумент: выражение.

Вы отображаете аргумент к результату выражения.

Вы можете использовать синтаксис функции лямбда, чтобы определить клавишный аргумент Сортировать () Метод на месте.

Вот пример:

>>> from operator import itemgetter
>>> customers = [('alice', 1000), ('bob', 100), ('frank', 10)]
>>> customers.sort(key=lambda x: x[1])
[('frank', 10), ('bob', 100), ('alice', 1000)]

Функция лямбда возвращает вторую ценность кортежного кортежа каждого кортеля в списке. Это основа, на которой алгоритм сортировки основывает свой заказ.

Python List Сортировать ключ по умолчанию

Если вы не определите клавишный аргумент для list.sort () или отсортировано () Методы, Python все еще использует функцию ключа. Итак, какая функция ключа по умолчанию?

Подумайте об этом на мгновение: значение ключевой функции состоит в том, чтобы связать «значение», которое можно использовать для сравнения. Таким образом, вы должны иметь возможность выполнять следующие операции сравнения в результате результатов ключевых значений.

Что значит быть сопоставимым? Сопоставимый объект должен реализовать ряд методов ( Источник ):

__eq__ ==
__ne__ !=
__lt__ <
__le__ <=
__gt__ >
__ge__ >=

Если вы реализуете все эти методы, вы можете сравнить два элемента легко. Все основные структуры данных Python реализовали их. Так что не беспокойтесь об этом.

Функция ключа по умолчанию возвращает сам элемент списка. Таким образом, сами элементы списка являются основой сравнения. Реализованные процедуры сравнения позволяют Python сравнивать каждую пару элементов списка, чтобы найти отсортированную последовательность.

Python List Сортировать ключевой элемент

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

Например, обычно используют itemgetter () Функция из Оператор Модуль для доступа к I-Th Value Reverable:

>>> from operator import itemgetter
>>> customers = [('alice', 1000), ('bob', 100), ('frank', 10)]
>>> customers.sort(key=itemgetter(1))
[('frank', 10), ('bob', 100), ('alice', 1000)]

itemgetter () Функция делает точно так же, как лямбда Функция В предыдущем примере: он возвращает второе значение кортежа и использует его в качестве основы для сравнения.

Список Python Сортировать вторичный ключ

Как сортировать список с двумя ключами? Например, у вас есть список кортежей [(1,2), (3,2), (3,3), (1,0), (0,1), (4,2), (1,1), (0,2), (0,0)] И вы хотите сначала разобраться после второго ценности кортежа. Но если есть галстук (например, (1,2) и (3,2) ), вы хотите разобраться после первого значения кортежа. Как вы можете это сделать?

По умолчанию Python сортирует кортежи лексикографически – первое значение кортежа считается первым. Только если есть галстук, требуется второе ценность кортежа и так далее.

Итак, чтобы сортировать с «двумя клавишами», вы можете определить ключевую функцию, которая возвращает кортеж, а не только одно значение кортежа. Вот пример:

>>> lst = [(1,2), (3,2), (3,3), (1,0), (0,1), (4,2), (1,1), (0,2), (0,0)]
>>> lst.sort(key=lambda x: (x[1], x[0]))
>>> lst
[(0, 0), (1, 0), (0, 1), (1, 1), (0, 2), (1, 2), (3, 2), (4, 2), (3, 3)]

Второе значение кортежа имеет приоритет над первым значением кортежа.

Python List Сортировать ключ Len

Проблема : Учитывая список строк. Как вы можете отсортировать их по длине?

Пример : Вы хотите сортировать свой список строк [«AAAA», «BBB», «CC», «D»] по длине, начиная с кратчайшей строки. Таким образом, результат должен быть [«D», «CC», «BBB», «AAAA»] Отказ Как это добиться?

Решение : Используйте Лен () Функция как ключевой аргумент list.sort () Метод такой: list.sort (ключ = len) . Как Лен () Функция – это встроенная функция Python, вам не нужно импортировать или определять что-нибудь еще.

Вот решение кода:

lst = ['aaaa', 'bbb', 'cc', 'd']
lst.sort(key=len)
print(lst)

Вывод – это список, отсортированный по длине строки:

['d', 'cc', 'bbb', 'aaaa']

Вы также можете использовать эту технику, чтобы сортировать список списков по длине.

Список Python Сортировать ключ Реверс

Чтобы сортировать список в порядке возрастания означает, что элементы заказываются от маленьких до крупных. По умолчанию списки Python отсортированы в порядке возрастания.

lst_1 = ['Bob', 'Alice', 'Frank']
lst_1.sort()
print(lst_1)
# ['Alice', 'Bob', 'Frank']


lst_2 = [10, 8, 11, 2, 1]
lst_2.sort()
print(lst_2)
# [1, 2, 8, 10, 11]

Однако, если вы хотите разобраться в порядке убывания (от большого до небольшого), вы можете использовать любой из следующих двух методов:

  • Используйте list.sort (Reverse = True) Метод с Reverse = True аргумент
  • Используйте нарезку Список [:: - 1] Чтобы изменить порядок списка.

Разница между обоими методами заключается в том, что первые изменяет список на месте, а второй создает новый список с отсортированными элементами в порядке убывания.

Вот пример:

lst_1 = ['Bob', 'Alice', 'Frank']
lst_1.sort(reverse=True)
print(lst_1)
# ['Frank', 'Bob', 'Alice']


lst_2 = [10, 8, 11, 2, 1]
lst_2.sort()
lst_2 = lst_2[::-1]
print(lst_2)
# [11, 10, 8, 2, 1]

Как вы видите, используя Реверс = Правда Аргумент красивее в большинстве случаев.

Python List Сортировать ключ кортеж

Проблема : Скажем, у вас есть список кортежей [(1,1,2), (0,0,1), (0,1,0), (0,1,2), (1,4,0)] И вы хотите сначала разобраться после второго ценности кортежа. Но если есть галстук (например, (0,1,0) и (1,1,2) ), вы хотите разобраться после третьего ценности кортежей. Если есть еще один галстук, вы хотите сортировать после первого значения кортежа. Как вы можете это сделать?

По умолчанию Python сортирует кортежи лексикографически Это означает, что первое значение кортежа считается первым. Только если есть галстук, требуется второе ценность кортежа и так далее.

Решение : Определите функцию ключевой функции, которая возвращает кортеж, а не только одно значение кортежа. Вот пример:

>>> lst = [(1,1,2), (0,0,1), (0,1,0), (0,1,2), (1,4,0)]
>>> lst.sort()
>>> lst
[(0, 0, 1), (0, 1, 0), (0, 1, 2), (1, 1, 2), (1, 4, 0)]
>>> lst.sort(key=lambda x: (x[1],x[2],x[0]))
>>> lst
[(0, 0, 1), (0, 1, 0), (0, 1, 2), (1, 1, 2), (1, 4, 0)]

Второе значение кортежа имеет приоритет над третьим ценностью кортеля. И третье значение кортеж имеет приоритет над первым ценностью кортежа.

Список Python Sort. По ключу в словаре

Далее вы собираетесь учиться Как сортировать список словарей во всех возможных вариациях. [ 1 ] Так что давайте начнем!

Как сортировать список Словари По стоимости?

Проблема : Учитывая список словарей. Каждый словарь состоит из нескольких (ключ, стоимости) пар. Вы хотите отсортировать их по значению определенного ключа словаря ( атрибут ). Как вы сортируете этот словарь?

Минимальный пример : Рассмотрим следующий пример, где вы хотите отсортировать список складских наплат по значению ключа «Алиса» Отказ

salaries = [{'Alice': 100000, 'Bob': 24000},
            {'Alice': 121000, 'Bob': 48000},
            {'Alice': 12000, 'Bob': 66000}]

sorted_salaries = # ... Sorting Magic Here ...

print(sorted_salaries)

Вывод должен выглядеть так, где зарплата Алисы определяет порядок словарей:

[{'Alice': 12000, 'Bob': 66000},
{'Alice': 100000, 'Bob': 24000},
{'Alice': 121000, 'Bob': 48000}]

Решение : У вас есть два основных способа сделать это – оба основаны на определении ключевой функции методов сортировки Python. Основная функция отображает каждый элемент списка (в нашем случае словарь) к одному значению, которое можно использовать в качестве основы сравнения.

  • Используйте функцию лямбда в качестве функции ключа, чтобы сортировать список словарей.
  • Используйте функцию itemGetter в качестве функции ключа, чтобы сортировать список словарей.

Вот код первого варианта, используя функцию лямбда, которая возвращает значение ключа «Алиса» из каждого словаря:

# Create the dictionary of Bob's and Alice's salary data
salaries = [{'Alice': 100000, 'Bob': 24000},
            {'Alice': 121000, 'Bob': 48000},
            {'Alice': 12000, 'Bob': 66000}]

# Use the sorted() function with key argument to create a new dic.
# Each dictionary list element is "reduced" to the value stored for key 'Alice'
sorted_salaries = sorted(salaries, key=lambda d: d['Alice'])

# Print everything to the shell
print(sorted_salaries)

Вывод – это сортированный словарь. Обратите внимание, что первый словарь имеет самую маленькую зарплату Алисы, а третий словарь имеет наибольшую зарплату Алисы.

[{'Alice': 12000, 'Bob': 66000},
 {'Alice': 100000, 'Bob': 24000},
 {'Alice': 121000, 'Bob': 48000}]

Попробуй сам:

Вы узнаете о втором пути ниже (где вы используете itemgetter Функция из оператора Module).

Сопутствующие статьи на блоге Finxter:

  • Как сортировать список словарей в Python [полное руководство]
  • Лямбда функции
  • Словари

Список Python Sort JSON по ключу

Проблема : Учитывая объект JSON в виде списка словарей в Python. Сортировать словарь по значению данного атрибута.

Пример : Скажем, у вас есть список объектов JSON (например, вложенный словарь), и вы хотите, чтобы они сортируют атрибутом JSON «Access_Time» Отказ

json = [{"page": { "url": "finxter.com", "access_time": "44"}},
        {"page": { "url": "python.org", "access_time": "12"}},
        {"page": { "url": "google.com", "access_time": "6"}}]

# ... Sorting Magic Here ...

print(json)

Ваша цель – это следующий результат:

[{"page": { "url": "google.com", "access_time": "6"}},
 {"page": { "url": "python.org", "access_time": "12"}},
 {"page": { "url": "finxter.com", "access_time": "44"}}]

Объекты JSON сортируются по значению атрибута «Access_Time» Отказ

Решение : Используйте функцию ключа, чтобы уменьшить каждый объект JSON к одному значению ( Access_Time ). Затем используйте это значение в качестве основы для сравнения при сортировке списка. Вот код:

json = [{"page": {"url": "finxter.com", "access_time": "44"}},
        {"page": {"url": "python.org", "access_time": "12"}},
        {"page": {"url": "google.com", "access_time": "6"}}]

json.sort(key=lambda x: int(x['page']['access_time']))

print(json)
'''
[{"page": { "url": "google.com", "access_time": "6"}},
 {"page": { "url": "python.org", "access_time": "12"}},
 {"page": { "url": "finxter.com", "access_time": "44"}}]
'''

Вы выполняете следующие три шага:

  • Во-первых, вы получаете внутренний словарь с вызовом x ['Page'] Для каждого элемента списка x .
  • Во-вторых, вы получаете строковое значение атрибута «Access_Time» Отказ
  • В-третьих, вы преобразуете строку в целое число. Это целое число является основой для сравнения и определяет порядок отсортированного списка.

Все три шага необходимы. Забудьте один из трех шагов, и это не будет работать!

Python List Сортировать ключевые примеры

Давайте посмотрим на серию примеров, чтобы округлить обсуждение ключевой функции метода сортировки списка Python.

lst = [(1, 2, 3), (0, 0, 7), (7, 0, 6)]

lst.sort()
print(lst)
# [(0, 0, 7), (1, 2, 3), (7, 0, 6)]

lst.sort(key=lambda x: x[2])
print(lst)
# [(1, 2, 3), (7, 0, 6), (0, 0, 7)]

lst.sort(key=lambda x: (x[1], x[2]))
print(lst)
# [(7, 0, 6), (0, 0, 7), (1, 2, 3)]

lst.sort(key=lambda x: x[0] + x[1] + x[2])
print(lst)
# [(1, 2, 3), (0, 0, 7), (7, 0, 6)]

lst.sort(key=lambda x: max(x))
print(lst)
# [(1, 2, 3), (0, 0, 7), (7, 0, 6)]

lst.sort(key=max)
print(lst)
# [(1, 2, 3), (0, 0, 7), (7, 0, 6)]

Попробуйте эти примеры себя в нашей интерактивной оболочке:

Куда пойти отсюда

То list.sort () Метод сортирует элементы списка на месте восходящей способности. Чтобы настроить поведение сортировки по умолчанию, используйте дополнительный ключ Аргумент, передавая функцию, которая возвращает сопоставимое значение для каждого элемента в списке. С дополнительным логическим задний ход аргумент, вы можете переключиться с возрастания ( Reverse = false. ) до по порядку убывания ( Reverse = True ).

Если вы продолжаете бороться с теми основными командами Python, и вы чувствуете застрявшие в своем прогрессе обучения, у меня есть что-то для вас: Python One-listers (Amazon Link).

В книге я дам вам тщательный обзор темы критических компьютерных наук, таких как машинное обучение, регулярное выражение, наука о данных, Numpy и Python Basics – все в одной линейке кода Python!

Получите книгу от Amazon!

Официальная книга Описание: Python One-Listers покажет читателям, как выполнить полезные задачи с одной строкой кода Python. Следуя краткому переподготовку Python, книга охватывает важные продвинутые темы, такие как нарезка, понимание списка, вещание, функции лямбда, алгоритмы, регулярные выражения, нейронные сети, логистические регрессии и др .. Каждая из 50 секций книг вводит проблему для решения, проходит читателя через навыки, необходимые для решения этой проблемы, затем предоставляет краткое однонаправленное решение Python с подробным объяснением.

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.

Оригинал: “https://blog.finxter.com/python-list-sort-key/”