Lista de classificação da estrutura de dados Python em ordem alfabética

159

Estou um pouco confuso em relação à estrutura de dados em python; (),, []e {}. Estou tentando classificar uma lista simples, provavelmente porque não consigo identificar o tipo de dados em que não estou conseguindo classificá-los.

Minha lista é simples: ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']

Minha pergunta é que tipo de dados são esses e como classificar as palavras em ordem alfabética?

gelado
fonte
Se você quiser classificar sua lista, poderá usar "list = ['Stem', 'constitui', 'Sedge', 'Eflux', 'Whim', 'Intrigue'] list.sort () print list".
kannanrbk
[]inclui o tipo de dados interno list(consulte tutorialspoint.com/python/python_lists.htm ). As listas são apenas grupos de valores (elas podem conter outros objetos iteráveis ​​- ou seja, listas aninhadas). ()inclui o builtin tuple. Eles são imutáveis ​​(não podem ser alterados). (consulte tutorialspoint.com/python/python_tuples.htm ). E {}inclui o builtin dictionary. Paralelos com um dicionário (para palavras), onde uma 'chave' seria a palavra e 'valor' é a definição. (consulte tutorialspoint.com/python/python_dictionary.htm ).
Rushy Panchal

Respostas:

231

[]indica uma lista , ()indica uma tupla e {}indica um dicionário . Você deve dar uma olhada no tutorial oficial do Python, pois esses são os princípios básicos da programação em Python.

O que você tem é uma lista de strings. Você pode classificar assim:

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

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

Como você pode ver, as palavras que começam com uma letra maiúscula têm preferência sobre as que começam com uma letra minúscula. Se você deseja classificá-los independentemente, faça o seguinte:

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

Você também pode classificar a lista na ordem inversa, fazendo o seguinte:

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']

Observação: se você trabalha com Python 3, stré o tipo de dados correto para cada string que contém texto legível por humanos. No entanto, se você ainda precisar trabalhar com o Python 2, poderá lidar com cadeias unicode que têm o tipo de dados unicodeno Python 2, e não str. Nesse caso, se você tiver uma lista de cadeias unicode, deverá escrever em key=unicode.lowervez de key=str.lower.

pemistahl
fonte
Usando o segundo exemplo em um pymongo find_one()resultado de um banco de dados MongoDB, recebo erro: descriptor 'lower' requires a 'str' object but received a 'unicode'. O resultado é uma matriz de strings e implementada assim: results['keywords'] = sorted(keywords['keywords'], key=str.lower). Alguém sabe como resolver isso?
user1063287
@ user1063287 Desculpe pela minha resposta tardia. No seu caso, você precisa escrever em key=unicode.lowervez de key=str.lower. Isso ocorre porque você está lidando com seqüências unicode, não com bytes. Consulte o oficial Unicode HOWTO para mais informações sobre isso, especialmente para as respectivas diferenças entre Python 2 e 3.
pemistahl
32

O Python possui uma função interna chamada sorted, que fornecerá uma lista classificada de qualquer iterável que você alimentar (como uma lista ( [1,2,3]); um dict ( {1:2,3:4}, embora apenas retorne uma lista classificada das chaves; um set ( {1,2,3,4)) ; ou uma tupla ( (1,2,3,4))).

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

As listas também têm um sortmétodo que executará a classificação no local (x.sort () retorna None, mas altera o objeto x).

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

Ambos também aceitam um keyargumento, que deve ser chamado (função / lambda) que você pode usar para alterar o que classificar.
Por exemplo, para obter uma lista de (key,value)pares de um ditado classificado por valor, você pode usar o seguinte código:

>>> 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)]
Teo Klestrup Röijezon
fonte
12

Você está lidando com uma lista python e classificá-la é tão fácil quanto fazer isso.

my_list = ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']
my_list.sort()
Bryan
fonte
11

Você pode usar a sortedfunção interna.

print sorted(['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue'])
Fatih Erikli
fonte
4

ListName.sort()irá classificá-lo em ordem alfabética. Você pode adicionar reverse=False/Truecolchetes para reverter a ordem dos itens:ListName.sort(reverse=False)

Crafter0800
fonte
1
Este é um comentário para 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']
>>> 
Abhijeet Rastogi
fonte