Elenco di ordinamento della struttura dati Python in ordine alfabetico


160

Sono un po 'confuso per quanto riguarda la struttura dei dati in Python; (), []e {}. Sto cercando di ordinare un semplice elenco, probabilmente poiché non riesco a identificare il tipo di dati che non riesco a ordinare.

La mia lista è semplice: ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']

La mia domanda è: che tipo di dati si tratta e come ordinare le parole in ordine alfabetico?


Se vuoi ordinare la tua lista, puoi usare "list = ['Stem', 'costituisce', 'Sedge', 'Eflux', 'Whim', 'Intrigue'] list.sort () print list".
kannanrbk,

[]racchiude il tipo di dati incorporato list(vedere tutorialspoint.com/python/python_lists.htm ). Gli elenchi sono solo gruppi di valori (possono contenere altri oggetti iterabili, ovvero elenchi nidificati). ()racchiude l'integrato tuple. Sono immutabili (non modificabili). (vedi tutorialspoint.com/python/python_tuples.htm ). E {}racchiude l'integrato dictionary. Parallelamente a un dizionario (per parole), in cui una "chiave" sarebbe la parola e il "valore" è la definizione. (vedi tutorialspoint.com/python/python_dictionary.htm ).
Rushy Panchal,

Risposte:


232

[]indica un elenco , ()indica una tupla e {}indica un dizionario . Dovresti dare un'occhiata al tutorial ufficiale di Python in quanto queste sono le basi della programmazione in Python.

Quello che hai è un elenco di stringhe. Puoi ordinarlo in questo modo:

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

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

Come puoi vedere, le parole che iniziano con una lettera maiuscola hanno la preferenza su quelle che iniziano con una lettera minuscola. Se vuoi ordinarli in modo indipendente, fai come segue:

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

Puoi anche ordinare l'elenco in ordine inverso facendo questo:

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

Nota: se lavori con Python 3, allora strè il tipo di dati corretto per ogni stringa che contiene testo leggibile dall'uomo. Tuttavia, se hai ancora bisogno di lavorare con Python 2, potresti avere a che fare con stringhe unicode che hanno il tipo di dati unicodein Python 2 e non str. In tal caso, se si dispone di un elenco di stringhe unicode, è necessario scrivere key=unicode.lowerinvece di key=str.lower.


Utilizzando il secondo esempio su un pymongo find_one()risultato da un database MongoDB, ottengo l'errore: descriptor 'lower' requires a 'str' object but received a 'unicode'. Il risultato è un array di stringhe e implementato in questo modo: results['keywords'] = sorted(keywords['keywords'], key=str.lower). Qualcuno sa come risolvere questo?
user1063287

@ user1063287 Ci scusiamo per la mia risposta tardiva. Nel tuo caso, devi scrivere key=unicode.lowerinvece di key=str.lower. Questo perché hai a che fare con stringhe unicode, non stringhe di byte. Si prega di fare riferimento all'Unicode HOWTO ufficiale per ulteriori informazioni al riguardo, in particolare per le rispettive differenze tra Python 2 e 3.
pemistahl

32

Python ha una funzione integrata chiamata sorted, che ti fornirà un elenco ordinato da qualsiasi iterabile che lo nutri (come un elenco ( [1,2,3]); un dict ( {1:2,3:4}, sebbene restituirà solo un elenco ordinato delle chiavi; un set ( {1,2,3,4) ; o una tupla ( (1,2,3,4))).

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

Gli elenchi hanno anche un sortmetodo che eseguirà l'ordinamento sul posto (x.sort () restituisce None ma modifica l'oggetto x).

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

Entrambi accettano anche un keyargomento, che dovrebbe essere un callable (funzione / lambda) che è possibile utilizzare per modificare il tipo di ordinamento.
Ad esempio, per ottenere un elenco di (key,value)-pairs da un dict che è ordinato in base al valore è possibile utilizzare il seguente codice:

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

Hai a che fare con un elenco Python e ordinarlo è facile come farlo.

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

11

È possibile utilizzare la sortedfunzione integrata.

print sorted(['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue'])

4

ListName.sort()lo ordinerà in ordine alfabetico. È possibile aggiungere reverse=False/Truele parentesi quadre per invertire l'ordine degli articoli:ListName.sort(reverse=False)


1
È un commento per 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']
>>> 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.