Сортировка списка данных в Python по алфавиту

160

Я немного запутался в отношении структуры данных в Python; (), []и {}. Я пытаюсь отсортировать простой список, возможно, так как я не могу определить тип данных, я не могу его отсортировать.

Мой список прост: ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']

У меня вопрос, что это за тип данных и как сортировать слова по алфавиту?

icypy
источник
Если вы хотите отсортировать свой список, тогда вы можете использовать «list = [print», «Sitge», «Eflux», «Whim», «Intrigue»] list.sort () print list ».
kannanrbk
[]включает встроенный тип данных list(см. tutorialspoint.com/python/python_lists.htm ). Списки - это просто группы значений (они могут содержать другие итерируемые объекты, то есть вложенные списки). ()огибает встроенную команду tuple. Они неизменны (не могут быть изменены). (см. tutorialspoint.com/python/python_tuples.htm ). И {}заключает в себе встроенный dictionary. Параллели со словарем (для слов), где «ключом» будет слово, а «значением» является определение. (см. tutorialspoint.com/python/python_dictionary.htm ).
Rushy Panchal

Ответы:

232

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

То, что у вас есть, это список строк. Вы можете отсортировать это так:

In [1]: lst = ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']

In [2]: sorted(lst)
Out[2]: ['Eflux', 'Intrigue', 'Sedge', 'Stem', 'Whim', 'constitute']

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

In [4]: sorted(lst, key=str.lower)
Out[4]: ['constitute', 'Eflux', 'Intrigue', 'Sedge', 'Stem', 'Whim']

Вы также можете отсортировать список в обратном порядке, выполнив это:

In [12]: sorted(lst, reverse=True)
Out[12]: ['constitute', 'Whim', 'Stem', 'Sedge', 'Intrigue', 'Eflux']

In [13]: sorted(lst, key=str.lower, reverse=True)
Out[13]: ['Whim', 'Stem', 'Sedge', 'Intrigue', 'Eflux', 'constitute']

Обратите внимание: если вы работаете с Python 3, то strэто правильный тип данных для каждой строки, содержащей текст, читаемый человеком. Однако, если вам все еще нужно работать с Python 2, вы можете иметь дело со строками Unicode, которые имеют тип данных unicodeв Python 2, а не с str. В таком случае, если у вас есть список строк Unicode, вы должны написать key=unicode.lowerвместо key=str.lower.

pemistahl
источник
Используя второй пример на PyMongo find_one()результате из базы данных MongoDB, я получаю сообщение об ошибке: descriptor 'lower' requires a 'str' object but received a 'unicode'. Результатом является массив строк и реализована следующим образом: results['keywords'] = sorted(keywords['keywords'], key=str.lower). Кто-нибудь знает, как решить эту проблему?
user1063287
@ user1063287 Извините за поздний ответ. В вашем случае вам нужно написатьkey=unicode.lower вместо key=str.lower. Это потому, что вы имеете дело со строками Unicode, а не байтовыми строками. Пожалуйста, обратитесь к официальному Unicode HOWTO для получения дополнительной информации об этом, особенно о соответствующих различиях между Python 2 и 3.
pemistahl
32

В Python есть встроенная функция с именем sorted, которая даст вам отсортированный список из любой итерируемой вами системы (например, list ( [1,2,3]); dict ( {1:2,3:4}хотя он просто вернет отсортированный список ключей; set ( {1,2,3,4) или кортеж ( (1,2,3,4))).

>>> x = [3,2,1]
>>> sorted(x)
[1, 2, 3]
>>> x
[3, 2, 1]

Списки также имеют sortметод, который будет выполнять сортировку на месте (x.sort () возвращает None, но изменяет объект x).

>>> x = [3,2,1]
>>> x.sort()
>>> x
[1, 2, 3]

Оба также принимают keyаргумент, который должен быть вызываемым (функция / лямбда), который вы можете использовать, чтобы изменить то, что сортировать.
Например, чтобы получить список (key,value)-пар из dict, который отсортирован по значению, вы можете использовать следующий код:

>>> x = {3:2,2:1,1:5}
>>> sorted(x.items(), key=lambda kv: kv[1])  # Items returns a list of `(key,value)`-pairs
[(2, 1), (3, 2), (1, 5)]
Тео Клеструп Ройесон
источник
12

Вы имеете дело со списком питонов, и сортировать его так же просто, как и делать это.

my_list = ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']
my_list.sort()
Bryan
источник
11

Вы можете использовать встроенную sortedфункцию.

print sorted(['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue'])
Фатих Эрикли
источник
4

ListName.sort()отсортируем по алфавиту. Вы можете добавить reverse=False/Trueв скобках, чтобы изменить порядок элементов:ListName.sort(reverse=False)

Crafter0800
источник
1
Это комментарий для Ruby?
allanberry
3
>>> a = ()
>>> type(a)
<type 'tuple'>
>>> a = []
>>> type(a)
<type 'list'>
>>> a = {}
>>> type(a)
<type 'dict'>
>>> a =  ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue'] 
>>> a.sort()
>>> a
['Eflux', 'Intrigue', 'Sedge', 'Stem', 'Whim', 'constitute']
>>> 
Абхиджит Растоги
источник