Hướng dẫn can you sort a list of dictionaries in python? - bạn có thể sắp xếp danh sách các từ điển trong python không?

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)

Hướng dẫn can you sort a list of dictionaries in python? - bạn có thể sắp xếp danh sách các từ điển trong python không?

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')) 
1

Pjzpjz

40,6K6 Huy hiệu vàng48 Huy hiệu bạc60 Huy hiệu Đồng

Nế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')) 
4

efotinisefotinisSep 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')) 
5

do

from operator import itemgetter
newlist = sorted(list_to_be_sorted, key=itemgetter('name')) 
6

from 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')) 
8

1

Sử dụng biến đổi Schwartzian từ Perl,

from operator import itemgetter
newlist = sorted(list_to_be_sorted, key=itemgetter('name')) 
9

cho

newlist = sorted(list_to_be_sorted, key=itemgetter('name'), reverse=True)
0

2

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

1

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

MateJMateJ

newlist = sorted(list_to_be_sorted, key=itemgetter('name'), reverse=True)
3

5,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)
5

Sử 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)
6

Dướ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)
7

Dướ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)
8

Chức năng chính:

newlist = sorted(list_to_be_sorted, key=itemgetter('name'), reverse=True)
9

list_of_dicts.sort(key=operator.itemgetter('name')) 6 sẽ được sắp xếp:

import operator
0

Sắp xếp nó tại chỗ:

import operator
1

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ừ https://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
2

Cả 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
4

Hoặc, tương tự như vậy

import operator
5

my_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

Bạn có thể sắp xếp một danh sách các từ điển không?

Để sắp xếp một danh sách các từ điển theo giá trị của khóa cụ thể, chỉ định tham số khóa của phương thức Sắp xếp () hoặc hàm Sắp xếp (). Bằng cách chỉ định một hàm được áp dụng cho từng phần tử của danh sách, nó được sắp xếp theo kết quả của hàm đó.specify the key parameter of the sort() method or the sorted() function. By specifying a function to be applied to each element of the list, it is sorted according to the result of that function.

Làm cách nào để sắp xếp nhiều từ điển trong Python?

Giải pháp: Bạn có hai cách chính để thực hiện điều này cả hai đều dựa trên việc xác định chức năng chính của các phương thức sắp xếp của Python. Hàm chính ánh xạ từng phần tử danh sách (trong trường hợp của chúng tôi là từ điển) đến một giá trị duy nhất có thể được sử dụng làm cơ sở so sánh. Sử dụng chức năng Lambda làm chức năng chính để sắp xếp danh sách từ điển.Use a lambda function as key function to sort the list of dictionaries.

Làm cách nào để sắp xếp một danh sách từ điển theo khóa?

Cần sắp xếp trong từ điển..
Đầu tiên, sắp xếp các phím theo thứ tự abc bằng cách sử dụng key_value.chức năng iterKeys () ..
Thứ hai, sắp xếp các phím theo thứ tự bằng cách sử dụng hàm được sắp xếp (key_value) và in giá trị tương ứng với nó ..
Thứ ba, sắp xếp các giá trị theo bảng chữ cái bằng cách sử dụng key_value.iterItems (), key = lambda (k, v): (v, k)).

Làm cách nào để sắp xếp một từ điển được đặt hàng trong Python?

Từ điển Python không được đặt hàng theo mặc định.....
Vì vậy, câu hỏi là, có cách nào để sắp xếp từ điển bằng các phím và bảo tồn thứ tự không?....
Để sắp xếp một từ điển theo khóa trong Python, hãy sử dụng kết hợp các phương thức sắp xếp () và đặt hàng ().....
Hàm sort () trả về một danh sách được sắp xếp của đối tượng có thể xác định được ..