Struktura danych Pythona sortuje listę alfabetycznie

159

Jestem trochę zdezorientowany co do struktury danych w Pythonie; (), []i {}. Próbuję posortować prostą listę, prawdopodobnie dlatego, że nie mogę zidentyfikować typu danych, nie mogę ich posortować.

Moja lista jest prosta: ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']

Moje pytanie brzmi: jaki to typ danych i jak sortować słowa alfabetycznie?

lodowaty
źródło
Jeśli chcesz posortować swoją listę, możesz użyć "list = ['Stem', 'construct', 'Sedge', 'Eflux', 'Whim', 'Intrigue'] list.sort () print list".
kannanrbk,
[]zawiera wbudowany typ danych list(patrz tutorialspoint.com/python/python_lists.htm ). Listy to po prostu grupy wartości (mogą zawierać inne iterowalne obiekty - np. Listy zagnieżdżone). ()obejmuje wbudowany tuple. Są niezmienne (nie można ich zmienić). (patrz tutorialspoint.com/python/python_tuples.htm ). I {}zamyka zabudowę dictionary. Paralele ze słownikiem (dla słów), gdzie „klucz” to słowo, a „wartość” to definicja. (patrz tutorialspoint.com/python/python_dictionary.htm ).
Rushy Panchal,

Odpowiedzi:

231

[]oznacza listę , ()oznacza krotkę i {}oznacza słownik . Powinieneś zapoznać się z oficjalnym samouczkiem Pythona, ponieważ są to bardzo podstawy programowania w Pythonie.

To, co masz, to lista ciągów. Możesz to posortować w ten sposób:

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

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

Jak widać, słowa zaczynające się od dużej litery mają pierwszeństwo przed słowami zaczynającymi się od małej litery. Jeśli chcesz je posortować niezależnie, zrób to:

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

Możesz także posortować listę w odwrotnej kolejności, wykonując następujące czynności:

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

Uwaga: jeśli pracujesz z Pythonem 3, strto prawidłowy typ danych dla każdego ciągu, który zawiera tekst czytelny dla człowieka. Jeśli jednak nadal musisz pracować z Pythonem 2, możesz mieć do czynienia z ciągami znaków Unicode, które mają typ danych unicodew Pythonie 2, a nie str. W takim przypadku, jeśli masz listę ciągów znaków Unicode, musisz napisać key=unicode.lowerzamiast key=str.lower.

pemistahl
źródło
Korzystanie z drugiego przykładu na pymongo find_one()wyniku z bazy danych MongoDB, otrzymuję błąd: descriptor 'lower' requires a 'str' object but received a 'unicode'. Rezultatem jest tablicą ciągów i wdrażane tak: results['keywords'] = sorted(keywords['keywords'], key=str.lower). Czy ktoś wie, jak to rozwiązać?
user1063287
@ user1063287 Przepraszam za spóźnioną odpowiedź. W twoim przypadku key=unicode.lowerzamiast key=str.lower. Dzieje się tak, ponieważ masz do czynienia z ciągami znaków Unicode, a nie łańcuchami bajtów. Proszę odnieść się do oficjalnego HOWTO Unicode celu uzyskania dalszych informacji na ten temat, zwłaszcza dla odpowiednich różnic między Python 2 i 3.
pemistahl
32

Python ma wbudowaną funkcję o nazwie sorted, która da ci posortowaną listę z dowolnej iterowalnej iteracji (takiej jak list ( [1,2,3]); a dict ( {1:2,3:4}chociaż zwróci posortowaną listę kluczy; a set ( {1,2,3,4) ; lub krotka ( (1,2,3,4))).

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

Listy mają również sortmetodę, która przeprowadzi sortowanie na miejscu (x.sort () zwraca None, ale zmienia obiekt x).

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

Oba przyjmują również keyargument, który powinien być wywoływalny (funkcja / lambda), za pomocą którego można zmienić sortowanie według.
Na przykład, aby uzyskać listę (key,value)-pairs z dyktu, która jest posortowana według wartości, możesz użyć następującego kodu:

>>> 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
źródło
12

Masz do czynienia z listą Pythona, a sortowanie jej jest tak proste, jak zrobienie tego.

my_list = ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']
my_list.sort()
Bryan
źródło
11

Możesz użyć wbudowanej sortedfunkcji.

print sorted(['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue'])
Fatih Erikli
źródło
4

ListName.sort()posortuje je alfabetycznie. reverse=False/TrueAby odwrócić kolejność elementów, możesz dodać nawiasy:ListName.sort(reverse=False)

Crafter0800
źródło
1
Czy to komentarz dla Rubiego?
alanberry
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
źródło