Danh sách sắp xếp cấu trúc dữ liệu Python theo thứ tự abc


159

Tôi hơi bối rối về cấu trúc dữ liệu trong python; (), [], Và {}. Tôi đang cố gắng sắp xếp một danh sách đơn giản, có lẽ vì tôi không thể xác định loại dữ liệu tôi không sắp xếp được.

Danh sách của tôi rất đơn giản: ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']

Câu hỏi của tôi là loại dữ liệu này là gì, và làm thế nào để sắp xếp các từ theo thứ tự abc?


Nếu bạn muốn sắp xếp danh sách của mình thì bạn có thể sử dụng "list = ['gốc', 'const const', 'Sedge', 'Eflux', 'Whim', 'Intoursue'] list.sort () list list".
kannanrbk

[]kèm theo kiểu dữ liệu dựng sẵn list, (xem guidespoint.com/python/python_lists.htmlm ). Danh sách chỉ là nhóm các giá trị (chúng có thể chứa các đối tượng lặp khác - tức là danh sách lồng nhau). ()bao quanh phần dựng sẵn tuple. Chúng là bất biến (không thể thay đổi). (xem hướng dẫnspoint.com / python / python_tuples.htm ). Và {}bao quanh các nội dung dictionary. Song song với một từ điển (đối với các từ), trong đó 'khóa' sẽ là từ và 'giá trị' là định nghĩa. (xem hướng dẫnspoint.com / python / python_dipedia.htmlm ).
Panchal vội vã

Câu trả lời:


231

[]biểu thị một danh sách , ()biểu thị một tuple{}biểu thị một từ điển . Bạn nên xem hướng dẫn chính thức về Python vì đây là những điều cơ bản về lập trình trong Python.

Những gì bạn có là một danh sách các chuỗi. Bạn có thể sắp xếp nó như thế này:

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

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

Như bạn có thể thấy, những từ bắt đầu bằng chữ in hoa được ưu tiên hơn những từ bắt đầu bằng chữ cái viết thường. Nếu bạn muốn sắp xếp chúng một cách độc lập, hãy làm điều này:

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

Bạn cũng có thể sắp xếp danh sách theo thứ tự ngược lại bằng cách thực hiện điều này:

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

Xin lưu ý: Nếu bạn làm việc với Python 3, thì đây strlà loại dữ liệu chính xác cho mọi chuỗi có chứa văn bản có thể đọc được. Tuy nhiên, nếu bạn vẫn cần làm việc với Python 2, thì bạn có thể xử lý các chuỗi unicode có kiểu dữ liệu unicodetrong Python 2 chứ không phải str. Trong trường hợp như vậy, nếu bạn có một danh sách các chuỗi unicode, bạn phải viết key=unicode.lowerthay vì key=str.lower.


Sử dụng ví dụ thứ hai trên find_one()kết quả pymongo từ cơ sở dữ liệu MongoDB, tôi gặp lỗi : descriptor 'lower' requires a 'str' object but received a 'unicode'. Kết quả là một chuỗi các chuỗi và được thực hiện như thế này : results['keywords'] = sorted(keywords['keywords'], key=str.lower). Có ai biết làm thế nào để giải quyết điều này?
dùng1063287

@ user1063287 Xin lỗi vì phản hồi muộn của tôi. Trong trường hợp của bạn, bạn cần phải viết key=unicode.lowerthay vì key=str.lower. Điều này là do bạn đang xử lý các chuỗi unicode, không phải chuỗi byte. Vui lòng tham khảo Unicode HOWTO chính thức để biết thêm thông tin về điều này, đặc biệt là về sự khác biệt tương ứng giữa Python 2 và 3.
pemistahl

32

Python có một hàm dựng sẵn được gọi sorted, nó sẽ cung cấp cho bạn một danh sách được sắp xếp từ bất kỳ lần lặp nào bạn cung cấp cho nó (chẳng hạn như danh sách ( [1,2,3]); dict ( {1:2,3:4}, mặc dù nó sẽ trả về danh sách các khóa đã sắp xếp; một bộ ( {1,2,3,4) ; hoặc một tuple ( (1,2,3,4))).

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

Danh sách cũng có một sortphương thức sẽ thực hiện sắp xếp tại chỗ (x.sort () trả về Không có nhưng thay đổi đối tượng x).

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

Cả hai cũng có một keyđối số, nên là một hàm có thể gọi được (hàm / lambda) mà bạn có thể sử dụng để thay đổi những gì cần sắp xếp theo.
Ví dụ: để có được danh sách (key,value)-pairs từ một dict được sắp xếp theo giá trị, bạn có thể sử dụng mã sau:

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

Bạn đang xử lý một danh sách python và sắp xếp nó dễ dàng như làm điều này.

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

11

Bạn có thể sử dụng sortedchức năng tích hợp.

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

4

ListName.sort()sẽ sắp xếp nó theo thứ tự abc. Bạn có thể thêm reverse=False/Truevào trong ngoặc để đảo ngược thứ tự của các mục:ListName.sort(reverse=False)


1
Đây có phải là một nhận xét cho 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']
>>> 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.