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?
python
list
sorting
alphabetical
lodowaty
źródło
źródło
[]
zawiera wbudowany typ danychlist
(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 wbudowanytuple
. 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 ).Odpowiedzi:
[]
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:
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:
Możesz także posortować listę w odwrotnej kolejności, wykonując następujące czynności:
Uwaga: jeśli pracujesz z Pythonem 3,
str
to 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 danychunicode
w Pythonie 2, a niestr
. W takim przypadku, jeśli masz listę ciągów znaków Unicode, musisz napisaćkey=unicode.lower
zamiastkey=str.lower
.źródło
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ć?key=unicode.lower
zamiastkey=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.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)
)).Listy mają również
sort
metodę, która przeprowadzi sortowanie na miejscu (x.sort () zwraca None, ale zmienia obiekt x).Oba przyjmują również
key
argument, 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:źródło
Masz do czynienia z listą Pythona, a sortowanie jej jest tak proste, jak zrobienie tego.
źródło
Możesz użyć wbudowanej
sorted
funkcji.źródło
ListName.sort()
posortuje je alfabetycznie.reverse=False/True
Aby odwrócić kolejność elementów, możesz dodać nawiasy:ListName.sort(reverse=False)
źródło
źródło