Lista de clasificación de estructura de datos de Python alfabéticamente

160

Estoy un poco confundido con respecto a la estructura de datos en python; (), []Y {}. Estoy tratando de ordenar una lista simple, probablemente porque no puedo identificar el tipo de datos que no puedo ordenar.

Mi lista es simple: ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']

Mi pregunta es qué tipo de datos son y cómo ordenar las palabras alfabéticamente.

icypy
fuente
Si desea ordenar su lista, puede usar "list = ['Stem', 'constitut', 'Sedge', 'Eflux', 'Whim', 'Intrigue'] list.sort () print list".
kannanrbk
[]incluye el tipo de datos incorporado list(consulte tutorialspoint.com/python/python_lists.htm ). Las listas son solo grupos de valores (pueden contener otros objetos iterables, es decir, listas anidadas). ()encierra el incorporado tuple. Son inmutables (no se pueden cambiar). (ver tutorialspoint.com/python/python_tuples.htm ). Y {}encierra el incorporado dictionary. Paralelos con un diccionario (para palabras), donde una "clave" sería la palabra y el "valor" es la definición (ver tutorialspoint.com/python/python_dictionary.htm ).
Rushy Panchal

Respuestas:

232

[]denota una lista , ()denota una tupla y {}denota un diccionario . Debería echar un vistazo al tutorial oficial de Python, ya que estos son los conceptos básicos de la programación en Python.

Lo que tienes es una lista de cadenas. Puedes ordenarlo así:

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

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

Como puede ver, las palabras que comienzan con una letra mayúscula tienen preferencia sobre aquellas que comienzan con una letra minúscula. Si desea ordenarlos de forma independiente, haga esto:

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

También puede ordenar la lista en orden inverso haciendo esto:

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

Tenga en cuenta: si trabaja con Python 3, entonces stres el tipo de datos correcto para cada cadena que contiene texto legible por humanos. Sin embargo, si aún necesita trabajar con Python 2, entonces podría tratar con cadenas Unicode que tienen el tipo de datos unicodeen Python 2, y no str. En tal caso, si tiene una lista de cadenas unicode, debe escribir en key=unicode.lowerlugar de key=str.lower.

pemistahl
fuente
Usando el segundo ejemplo en un pymongo find_one()resultado de una base de datos MongoDB, me sale error: descriptor 'lower' requires a 'str' object but received a 'unicode'. El resultado es una matriz de cadenas y aplicado de esta manera: results['keywords'] = sorted(keywords['keywords'], key=str.lower). ¿Alguien sabe cómo resolver esto?
user1063287
@ user1063287 Lo siento por mi respuesta tardía. En su caso, necesita escribir en key=unicode.lowerlugar de key=str.lower. Esto se debe a que se trata de cadenas unicode, no de cadenas de bytes. Consulte el CÓMO oficial de Unicode para obtener más información sobre esto, especialmente para las diferencias respectivas entre Python 2 y 3.
pemistahl
32

Python tiene una función incorporada llamada sorted, que le dará una lista ordenada de cualquier iterable que lo alimente (como una lista ( [1,2,3]); un dict ( {1:2,3:4}, aunque solo devolverá una lista ordenada de las teclas; un conjunto ( {1,2,3,4) ; o una tupla ( (1,2,3,4))).

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

Las listas también tienen un sortmétodo que realizará la ordenación in situ (x.sort () devuelve None pero cambia el objeto x).

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

Ambos también toman un keyargumento, que debería ser invocable (función / lambda) que puede usar para cambiar por qué ordenar.
Por ejemplo, para obtener una lista de (key,value)pares de un dict que se ordena por valor, puede usar el siguiente 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
fuente
12

Estás lidiando con una lista de python, y ordenarla es tan fácil como hacerlo.

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

Puede usar la sortedfunción incorporada.

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

ListName.sort()lo ordenará alfabéticamente. Puede agregar reverse=False/Trueentre paréntesis para invertir el orden de los elementos:ListName.sort(reverse=False)

Crafter0800
fuente
1
¿Es este un comentario 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
fuente