Hàm import operator 7 có tham số import operator 8
newlist = 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ăng
from 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ần
newlist = sorted(list_to_be_sorted, key=itemgetter('name'), reverse=True)
wjandrea
24.8k8 Huy hiệu vàng53 Huy hiệu bạc73 Huy hiệu đồng8 gold badges53 silver badges73 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ố list_of_dicts.sort(key=operator.itemgetter('name')) 2 vừa hiệu quả hơn và gọn gàng hơn:5 gold badges31 silver badges36 bronze badges
... 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,6K6 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.1k5 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')) 2
from 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,8302 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.
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:
import operator 0import operator 1Sắp xếp nó tại chỗ:
Nếu bạn cần list_of_dicts.sort(key=operator.itemgetter('name')) 6 ban đầu, hãy gọi hàm import operator 7 chuyển nó là list_of_dicts.sort(key=operator.itemgetter('name')) 6 và chức năng chính, sau đó gán cho list_of_dicts.sort(key=operator.itemgetter('name')) 6 được trả về cho một biến mới:
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:
Để 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:
Hoặ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