Hàm
import operator
7 có tham số import operator
8newlist = sorted[list_to_be_sorted, key=lambda d: d['name']]
Ngoài ra, bạn có thể sử dụng
import operator
9 thay vì tự xác định chức năngfrom operator import itemgetter
newlist = sorted[list_to_be_sorted, key=itemgetter['name']]
Để hoàn thiện, thêm
list_of_dicts.sort[key=operator.itemgetter['name']]
0 để sắp xếp theo thứ tự giảm dầnnewlist = sorted[list_to_be_sorted, key=itemgetter['name'], reverse=True]
wjandrea
25.2k8 Huy hiệu vàng54 Huy hiệu bạc75 Huy hiệu Đồng8 gold badges54 silver badges75 bronze badges
Đã trả lời ngày 16 tháng 9 năm 2008 lúc 14:39Sep 16, 2008 at 14:39
14
import operator
Để sắp xếp danh sách từ điển theo phím = 'name':
list_of_dicts.sort[key=operator.itemgetter['name']]
Để sắp xếp danh sách từ điển theo khóa = 'tuổi':
list_of_dicts.sort[key=operator.itemgetter['age']]
Cedbeu
1.83914 Huy hiệu bạc24 Huy hiệu đồng14 silver badges24 bronze badges
Đã trả lời ngày 16 tháng 9 năm 2008 lúc 15:18Sep 16, 2008 at 15:18
4
my_list = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
my_list.sort[lambda x,y : cmp[x['name'], y['name']]]
list_of_dicts.sort[key=operator.itemgetter['name']]
1 bây giờ sẽ là những gì bạn muốn.Hoặc tốt hơn:
Kể từ Python 2.4, có một đối số
list_of_dicts.sort[key=operator.itemgetter['name']]
2 vừa hiệu quả hơn và gọn gàng hơn:my_list = sorted[my_list, key=lambda k: k['name']]
... Lambda là, IMO, dễ hiểu hơn
import operator
9, nhưng số dặm của bạn có thể khác nhau.Đã trả lời ngày 16 tháng 9 năm 2008 lúc 14:39Sep 16, 2008 at 14:39
Để sắp xếp danh sách từ điển theo phím = 'name':pjz
Để sắp xếp danh sách từ điển theo khóa = 'tuổi':6 gold badges48 silver badges60 bronze badges
3
Cedbeu
my_list = [{'name':'Homer', 'age':39}, {'name':'Milhouse', 'age':10}, {'name':'Bart', 'age':10} ]
sortedlist = sorted[my_list , key=lambda elem: "%02d %s" % [elem['age'], elem['name']]]
1.83914 Huy hiệu bạc24 Huy hiệu đồng
4
a = [{'name':'Homer', 'age':39}, ...]
# This changes the list a
a.sort[key=lambda k : k['name']]
# This returns a new list [a is not modified]
sorted[a, key=lambda k : k['name']]
from operator import itemgetter
newlist = sorted[list_to_be_sorted, key=itemgetter['name']]
0Đã trả lời ngày 16 tháng 9 năm 2008 lúc 15:18
list_of_dicts.sort[key=operator.itemgetter['name']]
1 bây giờ sẽ là những gì bạn muốn.Sep
16, 2008 at 14:43
Hoặc tốt hơn:efotinis
Kể từ Python 2.4, có một đối số
2 vừa hiệu quả hơn và gọn gàng hơn:5 gold badges31 silver badges36 bronze badgeslist_of_dicts.sort[key=operator.itemgetter['name']]
... Lambda là, IMO, dễ hiểu hơn
import operator
9, nhưng số dặm của bạn có thể khác nhau.from operator import itemgetter
newlist = sorted[list_to_be_sorted, key=itemgetter['name']]
1Pjzpjz
40,8K6 Huy hiệu vàng48 Huy hiệu bạc60 Huy hiệu ĐồngNếu bạn muốn sắp xếp danh sách theo nhiều khóa, bạn có thể làm như sau:Sep 16, 2008 at 14:36
Nó khá hackish, vì nó dựa vào việc chuyển đổi các giá trị thành một biểu diễn chuỗi duy nhất để so sánh, nhưng nó hoạt động như mong đợi đối với các số bao gồm các số âm [mặc dù bạn sẽ cần định dạng chuỗi của mình một cách thích hợp với số 0 nếu bạn đang sử dụng số].
'Key' được sử dụng để sắp xếp theo giá trị tùy ý và 'itemgetter' đặt giá trị đó cho thuộc tính 'tên' của mỗi mục.
from operator import itemgetter
newlist = sorted[list_to_be_sorted, key=itemgetter['name']]
3Đã trả lời ngày 16 tháng 9 năm 2008 lúc 14:43
from operator import itemgetter
newlist = sorted[list_to_be_sorted, key=itemgetter['name']]
4efotinisefotinisSep 16, 2008 at 14:52
14.2k5 Huy hiệu vàng31 Huy hiệu bạc36 Huy hiệu đồngOwen
Tôi đoán bạn có nghĩa là:6 silver badges6 bronze badges
Điều này sẽ được sắp xếp như thế này:
from operator import itemgetter
newlist = sorted[list_to_be_sorted, key=itemgetter['name']]
5do
from operator import itemgetter
newlist = sorted[list_to_be_sorted, key=itemgetter['name']]
6from operator import itemgetter
newlist = sorted[list_to_be_sorted, key=itemgetter['name']]
2from operator import itemgetter
newlist = sorted[list_to_be_sorted, key=itemgetter['name']]
7Đã trả lời ngày 16 tháng 9 năm 2008 lúc 14:36
Bạn có thể sử dụng hàm so sánh tùy chỉnh hoặc bạn có thể chuyển trong một hàm tính toán khóa sắp xếp tùy chỉnh. Điều đó thường hiệu quả hơn vì khóa chỉ được tính một lần cho mỗi mục, trong khi hàm so sánh sẽ được gọi là nhiều lần hơn.
1
Bạn có thể làm theo cách này:
Nhưng thư viện tiêu chuẩn chứa một thói quen chung để có được các mục của các đối tượng tùy ý:
list_of_dicts.sort[key=operator.itemgetter['name']]
4. Vì vậy, hãy thử điều này thay thế:Sep 16, 2008 at 14:31
Đã trả lời ngày 16 tháng 9 năm 2008 lúc 14:52Matej
Owenowen2 gold badges27 silver badges27 bronze badges
2
8716 Huy hiệu bạc6 Huy hiệu Đồng
from operator import itemgetter
newlist = sorted[list_to_be_sorted, key=itemgetter['name']]
81
Sử dụng biến đổi Schwartzian từ Perl,
from operator import itemgetter
newlist = sorted[list_to_be_sorted, key=itemgetter['name']]
9cho
newlist = sorted[list_to_be_sorted, key=itemgetter['name'], reverse=True]
02
Thông tin thêm về biến đổi Perl Schwartzian:
Trong khoa học máy tính, biến đổi Schwartzian là một thành ngữ lập trình Perl được sử dụng để cải thiện hiệu quả của việc sắp xếp một danh sách các mục. Thành ngữ này phù hợp để sắp xếp dựa trên so sánh khi đặt hàng thực sự dựa trên thứ tự của một thuộc tính nhất định [khóa] của các yếu tố, trong đó tính toán thuộc tính đó là một hoạt động chuyên sâu nên được thực hiện một số lần tối thiểu. Biến đổi Schwartzian đáng chú ý ở chỗ nó không sử dụng các mảng tạm thời được đặt tên.
newlist = sorted[list_to_be_sorted, key=itemgetter['name'], reverse=True]
11
Bạn phải thực hiện chức năng so sánh của riêng bạn sẽ so sánh các từ điển bằng các giá trị của các khóa tên. Xem Sắp xếp Mini-How từ Pythoninfo Wiki
Đã trả lời ngày 16 tháng 9 năm 2008 lúc 14:31
newlist = sorted[list_to_be_sorted, key=itemgetter['name'], reverse=True]
2MateJMateJ
newlist = sorted[list_to_be_sorted, key=itemgetter['name'], reverse=True]
35,8402 Huy hiệu vàng27 Huy hiệu bạc27 Huy hiệu đồng
newlist = sorted[list_to_be_sorted, key=itemgetter['name'], reverse=True]
4Đôi khi chúng ta cần sử dụng
list_of_dicts.sort[key=operator.itemgetter['name']]
5. Ví dụ,newlist = sorted[list_to_be_sorted, key=itemgetter['name'], reverse=True]
5Sử dụng gói Pandas là một phương pháp khác, mặc dù thời gian chạy của nó ở quy mô lớn chậm hơn nhiều so với các phương pháp truyền thống hơn được đề xuất bởi những người khác:
newlist = sorted[list_to_be_sorted, key=itemgetter['name'], reverse=True]
6Dưới đây là một số giá trị điểm chuẩn cho một danh sách nhỏ và danh sách các dicts lớn [100k+]:
newlist = sorted[list_to_be_sorted, key=itemgetter['name'], reverse=True]
7Dưới đây là giải pháp chung thay thế - nó sắp xếp các yếu tố của một dict bằng các khóa và giá trị.
Ưu điểm của nó - không cần chỉ định các khóa và nó vẫn hoạt động nếu một số khóa bị thiếu trong một số từ điển.
Nếu bạn không cần list_of_dicts.sort[key=operator.itemgetter['name']]
6 gốc của list_of_dicts.sort[key=operator.itemgetter['name']]
7, bạn có thể sửa đổi nó tại chỗ bằng phương thức list_of_dicts.sort[key=operator.itemgetter['name']]
8 bằng cách sử dụng chức năng khóa tùy chỉnh.
list_of_dicts.sort[key=operator.itemgetter['name']]
list_of_dicts.sort[key=operator.itemgetter['name']]
list_of_dicts.sort[key=operator.itemgetter['name']]
newlist = sorted[list_to_be_sorted, key=itemgetter['name'], reverse=True]
8Chức năng chính:
newlist = sorted[list_to_be_sorted, key=itemgetter['name'], reverse=True]
9list_of_dicts.sort[key=operator.itemgetter['name']]
6 sẽ được sắp xếp:
list_of_dicts.sort[key=operator.itemgetter['name']]
import operator
0Sắp xếp nó tại chỗ:
import operator
1Nếu bạn cần
6 ban đầu, hãy gọi hàmlist_of_dicts.sort[key=operator.itemgetter['name']]
7 chuyển nó làimport operator
6 và chức năng chính, sau đó gán cholist_of_dicts.sort[key=operator.itemgetter['name']]
6 được trả về cho một biến mới:list_of_dicts.sort[key=operator.itemgetter['name']]
In
list_of_dicts.sort[key=operator.itemgetter['age']]
4 và list_of_dicts.sort[key=operator.itemgetter['age']]
5.Từ //wiki.python.org/moin/pythonspeed:
Tương tự như vậy, các chức năng tích hợp chạy nhanh hơn các tương đương được xây dựng bằng tay. Ví dụ: MAP [Toán tử.ADD, V1, V2] nhanh hơn Bản đồ [Lambda X, Y: X+Y, V1, V2].
Dưới đây là so sánh tốc độ sắp xếp bằng cách sử dụng
list_of_dicts.sort[key=operator.itemgetter['age']]
9 so với list_of_dicts.sort[key=operator.itemgetter['name']]
4.import operator
2Cả hai kỹ thuật đều sắp xếp danh sách theo cùng một thứ tự [được xác minh bằng cách thực hiện câu lệnh cuối cùng trong khối mã], nhưng cái đầu tiên nhanh hơn một chút.
Như được chỉ ra bởi @claudiu cho @monojohnny trong phần bình luận của câu trả lời này, đã cho:
given:
import operator
3Để sắp xếp danh sách từ điển theo khóa
my_list = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
my_list.sort[lambda x,y : cmp[x['name'], y['name']]]
4, my_list = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
my_list.sort[lambda x,y : cmp[x['name'], y['name']]]
5 [như trong câu lệnh SQL my_list = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
my_list.sort[lambda x,y : cmp[x['name'], y['name']]]
6], bạn có thể sử dụng:[like in SQL statement
my_list = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
my_list.sort[lambda x,y : cmp[x['name'], y['name']]]
6], you can use:import operator
4Hoặc, tương tự như vậy
import operator
5my_list = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
my_list.sort[lambda x,y : cmp[x['name'], y['name']]]
7.
{'name': 'Milhouse', 'age': 10},
{'name': 'Homer', 'age': 39}]
Sắp xếp theo nhiều cột, trong khi theo thứ tự giảm dần trên một số trong số chúng: mảng CMPS toàn cầu với hàm CMP, chứa tên trường và inv == -1 cho desc 1 cho ASC
import operator
6