Struktur data python mengurutkan daftar berdasarkan abjad


160

Saya agak bingung mengenai struktur data dalam python; (),, []dan {}. Saya mencoba mengurutkan daftar sederhana, mungkin karena saya tidak dapat mengidentifikasi jenis data yang saya gagal untuk mengurutkannya.

Daftar saya sederhana: ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']

Pertanyaan saya adalah tipe data apa ini, dan bagaimana cara mengurutkan kata berdasarkan abjad?


Jika Anda ingin mengurutkan daftar Anda maka Anda dapat menggunakan "list = ['Stem', 'merupakan', 'Sedge', 'Eflux', 'Whim', 'Intrigue'] list.sort () daftar cetak () daftar cetak".
kannanrbk

[]melampirkan tipe data bawaan list, (lihat tutorialspoint.com/python/python_lists.htm ). Daftar hanyalah sekelompok nilai (mereka dapat berisi objek yang dapat diulang-yaitu daftar bersarang). ()membungkus builtin tuple. Mereka tidak berubah (tidak bisa diubah). (lihat tutorialspoint.com/python/python_tuples.htm ). Dan {}melampirkan builtin dictionary. Paralel dengan kamus (untuk kata-kata), di mana 'kunci' akan menjadi kata dan 'nilai adalah definisi. (lihat tutorialspoint.com/python/python_dictionary.htm ).
Rushy Panchal

Jawaban:


232

[]menunjukkan daftar , ()menunjukkan tupel dan {}menunjukkan kamus . Anda harus melihat pada tutorial Python resmi karena ini adalah dasar-dasar pemrograman di Python.

Yang Anda miliki adalah daftar string. Anda dapat mengurutkannya seperti ini:

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

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

Seperti yang Anda lihat, kata-kata yang dimulai dengan huruf besar mendapatkan preferensi daripada yang dimulai dengan huruf kecil. Jika Anda ingin mengurutkannya secara independen, lakukan ini:

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

Anda juga dapat mengurutkan daftar dalam urutan terbalik dengan melakukan ini:

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

Harap dicatat: Jika Anda bekerja dengan Python 3, maka stradalah tipe data yang benar untuk setiap string yang berisi teks yang bisa dibaca manusia. Namun, jika Anda masih perlu bekerja dengan Python 2, maka Anda mungkin berurusan dengan string unicode yang memiliki tipe data unicodedi Python 2, dan tidak str. Dalam kasus seperti itu, jika Anda memiliki daftar string unicode, Anda harus menulis key=unicode.lowerbukan key=str.lower.


Menggunakan contoh kedua pada pymongo find_one()hasil dari database MongoDB, saya mendapatkan error: descriptor 'lower' requires a 'str' object but received a 'unicode'. Hasilnya adalah sebuah array dari string dan dilaksanakan seperti ini: results['keywords'] = sorted(keywords['keywords'], key=str.lower). Adakah yang tahu bagaimana menyelesaikan ini?
user1063287

@ user1063287 Maaf atas keterlambatan respons saya. Dalam kasus Anda, Anda harus menulis key=unicode.loweralih-alih key=str.lower. Ini karena Anda berurusan dengan string unicode, bukan string byte. Silakan merujuk ke Unicode HOWTO resmi untuk informasi lebih lanjut tentang ini, terutama untuk perbedaan masing-masing antara Python 2 dan 3.
pemistahl

32

Python memiliki fungsi bawaan yang disebut sorted, yang akan memberi Anda daftar diurutkan dari setiap iterable yang Anda beri makan (seperti daftar ( [1,2,3]); dict ( {1:2,3:4}, meskipun itu hanya akan mengembalikan daftar kunci yang diurutkan; set ( {1,2,3,4) ( ; atau tuple ( (1,2,3,4))).

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

Daftar juga memiliki sortmetode yang akan melakukan sortir di tempat (x.sort () mengembalikan Tidak ada tetapi mengubah objek x).

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

Keduanya juga mengambil keyargumen, yang seharusnya bisa dipanggil (fungsi / lambda) yang dapat Anda gunakan untuk mengubah apa yang harus disortir.
Misalnya, untuk mendapatkan daftar (key,value)-pairs dari dict yang diurutkan berdasarkan nilai Anda dapat menggunakan kode berikut:

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

Anda berurusan dengan daftar python, dan mengurutkannya semudah melakukan ini.

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

11

Anda dapat menggunakan sortedfungsi bawaan.

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

4

ListName.sort()akan mengurutkannya berdasarkan abjad. Anda dapat menambahkan reverse=False/Truetanda kurung untuk membalik urutan item:ListName.sort(reverse=False)


1
Apakah ini komentar untuk 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']
>>> 
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.