2012-12-25 20 views
84

Sono un po 'confuso riguardo la struttura dei dati in python; (), [] e {}. Sto cercando di risolvere una lista semplice, probabilmente perché non riesco a identificare il tipo di dati che non riesco a ordinare.Elenco di ordinamento della struttura dati Python in ordine alfabetico

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

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

+0

Se si desidera ordinare l'elenco, è possibile utilizzare "list = ['Stem', 'costituire', 'Carice', 'Eflux', ' Whim ',' Intrigue '] list.sort() stampa lista ". – kannanrbk

+0

'[]' racchiude il tipo di dati incorporato 'list', (vedi http://www.tutorialspoint.com/python/python_lists.htm). Le liste sono solo gruppi di valori (possono contenere altri oggetti iterabili, cioè elenchi annidati). '()' racchiude la tupla 'incorporata'. Sono immutabili (non possono essere modificati). (vedi http://www.tutorialspoint.com/python/python_tuples.htm). E '{}' racchiude il dizionario incorporato '. Paralleli con un dizionario (per parole), dove una "chiave" sarebbe la parola e il "valore" è la definizione. (vedi http://www.tutorialspoint.com/python/python_dictionary.htm). –

risposta

124

[] indicato un list, () indica un tuple e {} indica un dictionary. Dovresti dare uno sguardo allo official Python tutorial in quanto queste sono le basi della programmazione in Python.

Quello che hai è un elenco di stringhe. È possibile ordinare 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 si può vedere, le parole che iniziano con una lettera maiuscola ottenere la preferenza rispetto a quelli che iniziano con una lettera minuscola. Se si desidera ordinare in modo indipendente, fare questo:

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

È inoltre possibile ordinare la lista in ordine inverso in questo modo:

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

Si prega di notare: Se si lavora con Python 3, quindi str è il tipo di dati corretto per ogni stringa che contiene testo leggibile. Tuttavia, se hai ancora bisogno di lavorare con Python 2, potresti occuparti di stringhe unicode che hanno il tipo di dati unicode in Python 2 e non str. In tal caso, se si dispone di un elenco di stringhe Unicode, è necessario scrivere key=unicode.lower anziché key=str.lower.

+0

Usando il secondo esempio su un risultato 'find_one()' di pymongo da un database MongoDB, ottengo l'errore: 'descriptor 'lower' richiede un oggetto 'str' ma ha ricevuto un 'unicode''. Il risultato è una serie di stringhe e implementate in questo modo: 'risultati ['parole chiave'] = ordinati (parole chiave ['parole chiave'], chiave = str.lower)'. Qualcuno sa come risolvere questo? – user1063287

+0

@ user1063287 Ci scusiamo per la mia risposta in ritardo. Nel tuo caso, devi scrivere 'key = unicode.lower' invece di' key = str.lower'. Questo perché hai a che fare con stringhe unicode, non con stringhe di byte. Si prega di fare riferimento al [Unicode HOWTO] ufficiale (https://docs.python.org/3/howto/unicode.html) per ulteriori informazioni su questo, in particolare per le rispettive differenze tra Python 2 e 3. – pemistahl

6

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

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

È possibile utilizzare la funzione integrata sorted.

print sorted(['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']) 
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'] 
>>> 
19

Python ha una funzione built-in chiamato sorted, che vi darà un elenco ordinato da qualsiasi iterabile che lo alimentano (ad esempio un elenco ([1,2,3]), un dict ({1:2,3:4}, anche se sarà solo restituirà un elenco ordinato delle chiavi; un insieme ({1,2,3,4). oppure una tupla ((1,2,3,4)))

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

liste hanno anche un metodo sort che eseguirà l'ordinamento sul posto

.

Entrambi hanno anche un argomento key, che dovrebbe essere un chiamabile (funzione/lambda) che è possibile utilizzare per modificare i criteri di ordinamento.
Ad esempio, per ottenere un elenco di (key,value) -pairs da un dict, che è ordinato per 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)] 
+0

@ jwpat7, yeah . Meglio? –

+0

Grazie per aver effettivamente spiegato come funzionava. Molto utile. – joshmcode

3

ListName.sort() selezionerò in ordine alfabetico. È possibile aggiungere reverse=False/True tra parentesi per invertire l'ordine degli articoli: ListName.sort(reverse=False)

+0

È un commento per Ruby? – allanberry

Problemi correlati