Hướng dẫn sort a list of dictionaries python by key - sắp xếp danh sách từ điển python theo khóa

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')) 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ừ //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

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

Để 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 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)).

Bạn có thể sắp xếp từ điển bằng khóa trong Python không?

Để sắp xếp khóa từ điển trong Python, chúng ta có thể sử dụng phương thức Dict.Items () và Sắp xếp (có thể lặp lại).DIGN.Phương thức () Phương thức trả về một đối tượng lưu trữ các cặp từ điển có giá trị khóa.use dict. items() and sorted(iterable) method. Dict. items() method returns an object that stores key-value pairs of dictionaries.

Chúng ta có thể sắp xếp danh sách từ điển trong Python không?

Chúng ta có thể sắp xếp các danh sách, bộ dữ liệu, chuỗi và các đối tượng khác có thể đi được trong Python vì tất cả chúng đều là đối tượng được đặt hàng.Vâng, kể từ Python 3.7, từ điển cũng nhớ thứ tự của các mục được chèn.Do đó, chúng tôi cũng có thể sắp xếp từ điển bằng cách sử dụng hàm Sắp xếp () tích hợp của Python.. Well, as of python 3.7, dictionaries remember the order of items inserted as well. Thus we are also able to sort dictionaries using python's built-in sorted() function.

Chủ đề