Hướng dẫn can we sort list of dictionary in python? - chúng ta có thể sắp xếp danh sách từ điển trong python không?

Xem thảo luận

Cải thiện bài viết

Lưu bài viết

  • Đọc
  • Bàn luận
  • Xem thảo luận

    Cải thiện bài viết

    Lưu bài viết

    Đọchow to sort a dictionary by value in Python

    Bàn luận

    Trong bài viết này, chúng tôi sẽ đề cập đến cách sắp xếp từ điển theo giá trị trong Python. & NBSP;

    Hướng dẫn can we sort list of dictionary in python? - chúng ta có thể sắp xếp danh sách từ điển trong python không?

    Sắp xếp luôn là một tiện ích hữu ích trong lập trình hàng ngày. Từ điển trong Python được sử dụng rộng rãi trong nhiều ứng dụng từ miền cạnh tranh đến miền nhà phát triển (ví dụ: xử lý dữ liệu JSON). Có kiến ​​thức để sắp xếp từ điển theo giá trị của họ có thể chứng minh hữu ích trong những trường hợp như vậy.

    Có 2 cách để đạt được sự sắp xếp này:sorted()” inbuilt function. Various variations can also be achieved for sorting the dictionaries. 

    • Hàm Lambda trong Python là gì? Use “reverse = True” in addition to the sorted() function.
    • Bài viết này liên quan đến việc sắp xếp bằng hàm Lambda và sử dụng chức năng sẵn có được sắp xếp (). Các biến thể khác nhau cũng có thể đạt được để sắp xếp các từ điển. & NBSP; Separate by “comma” mentioning the correct order in which sorting has to be performed.

    Example:

    Python3

    Đối với thứ tự giảm dần: Sử dụng Reverse Reversion = true, ngoài hàm Sắp xếp ().

    import operator
    
    9
    list_of_dicts.sort(key=operator.itemgetter('name'))
    
    0
    import operator
    
    1
    import operator
    
    2
    list_of_dicts.sort(key=operator.itemgetter('name'))
    
    3
    import operator
    
    4
    import operator
    
    5
    import operator
    
    2
    import operator
    
    7
    import operator
    
    8

    Để sắp xếp W.R.T nhiều giá trị: tách biệt bởi dấu phẩy, đề cập đến thứ tự chính xác trong đó việc sắp xếp phải được thực hiện.

    list_of_dicts.sort(key=operator.itemgetter('age'))
    
    9
    my_list = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
    
    my_list.sort(lambda x,y : cmp(x['name'], y['name']))
    
    0
    my_list = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
    
    my_list.sort(lambda x,y : cmp(x['name'], y['name']))
    
    1
    my_list = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
    
    my_list.sort(lambda x,y : cmp(x['name'], y['name']))
    
    2

    Is

    list_of_dicts.sort(key=operator.itemgetter('age'))
    
    9
    my_list = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
    
    my_list.sort(lambda x,y : cmp(x['name'], y['name']))
    
    0
    my_list = sorted(my_list, key=lambda k: k['name'])
    
    6
    my_list = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
    
    my_list.sort(lambda x,y : cmp(x['name'], y['name']))
    
    2

    list_of_dicts.sort(key=operator.itemgetter('age'))
    
    9
    my_list = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
    
    my_list.sort(lambda x,y : cmp(x['name'], y['name']))
    
    0
    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']))
    
    0
    my_list = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
    
    my_list.sort(lambda x,y : cmp(x['name'], y['name']))
    
    2

    Các

    list_of_dicts.sort(key=operator.itemgetter('age'))
    
    9
    my_list = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
    
    my_list.sort(lambda x,y : cmp(x['name'], y['name']))
    
    0
    my_list = sorted(my_list, key=lambda k: k['name'])
    
    6
    my_list = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
    
    my_list.sort(lambda x,y : cmp(x['name'], y['name']))
    
    2

    list_of_dicts.sort(key=operator.itemgetter('age'))
    
    9
    my_list = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
    
    my_list.sort(lambda x,y : cmp(x['name'], y['name']))
    
    0
    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    11
    my_list = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
    
    my_list.sort(lambda x,y : cmp(x['name'], y['name']))
    
    2

    Các

    Output:

    The list printed sorting by age: 
    [{'age': 19, 'name': 'Nikhil'}, {'age': 20, 'name': 'Nandini'}, {'age': 20, 'name': 'Manjeet'}]
    
    The list printed sorting by age and name: 
    [{'age': 19, 'name': 'Nikhil'}, {'age': 20, 'name': 'Manjeet'}, {'age': 20, 'name': 'Nandini'}]
    
    The list printed sorting by age in descending order: 
    [{'age': 20, 'name': 'Nandini'}, {'age': 20, 'name': 'Manjeet'}, {'age': 19, 'name': 'Nikhil'}]

    Các Ways to sort list of dictionaries by values in Python – Using itemgetter

    Hàm

    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    27 có tham số
    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    28

    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    

    Ngoài ra, bạn có thể sử dụng

    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    29 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

    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    30 để 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 we sort list of dictionary in python? - chúng ta có thể sắp xếp danh sách từ điển trong python không?

    wjandrea

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

    Hướng dẫn can we sort list of dictionary in python? - chúng ta có thể sắp xếp danh sách từ điển trong python không?

    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.82914 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']))
    

    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    31 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ố

    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    32 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

    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    29, 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

    Pjzpjzpjz

    40,7K6 Huy hiệu vàng48 Huy hiệu bạc60 Huy hiệu đồng6 gold badges48 silver badges60 bronze badges

    3

    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:

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

    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ố).

    4

    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    0

    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    1

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

    Đã trả lời ngày 16 tháng 9 năm 2008 lúc 14:43Sep 16, 2008 at 14:43

    efotinisefotinisefotinis

    14.1k5 Huy hiệu vàng31 Huy hiệu bạc36 Huy hiệu đồng5 gold badges31 silver badges36 bronze badges

    Tôi đoán bạn có nghĩa là:

    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    2

    Điều này sẽ được sắp xếp như thế này:

    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    3

    Đã trả lời ngày 16 tháng 9 năm 2008 lúc 14:36Sep 16, 2008 at 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.

    Bạn có thể làm theo cách này:

    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    4

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

    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    34. Vì vậy, hãy thử điều này thay thế:

    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    5

    Đã trả lời ngày 16 tháng 9 năm 2008 lúc 14:52Sep 16, 2008 at 14:52

    OwenowenOwen

    8716 Huy hiệu bạc6 Huy hiệu Đồng6 silver badges6 bronze badges

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

    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    6

    do

    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    7

    cho

    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    8

    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.

    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:31Sep 16, 2008 at 14:31

    MateJMateJMatej

    5,8402 Huy hiệu vàng27 Huy hiệu bạc27 Huy hiệu đồng2 gold badges27 silver badges27 bronze badges

    2

    Đôi khi chúng ta cần sử dụng

    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    35. Ví dụ,

    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    9

    1

    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:

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

    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+):

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

    2

    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.

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

    1

    Nếu bạn không cần

    newlist = sorted(list_to_be_sorted, key=itemgetter('name'), reverse=True)
    
    8 gốc của
    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    37, bạn có thể sửa đổi nó tại chỗ bằng phương thức
    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    38 bằng cách sử dụng chức năng khóa tùy chỉnh.

    Chức năng chính:

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

    newlist = sorted(list_to_be_sorted, key=itemgetter('name'), reverse=True)
    
    8 sẽ được sắp xếp:

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

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

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

    Nếu bạn cần

    newlist = sorted(list_to_be_sorted, key=itemgetter('name'), reverse=True)
    
    8 ban đầu, hãy gọi hàm
    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    27 chuyển nó là
    newlist = sorted(list_to_be_sorted, key=itemgetter('name'), reverse=True)
    
    8 và chức năng chính, sau đó gán
    newlist = sorted(list_to_be_sorted, key=itemgetter('name'), reverse=True)
    
    8 được trả về cho một biến mới:

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

    In ấn

    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    44 và
    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    45.

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

    Giả sử tôi có một từ điển

    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    46 với các yếu tố dưới đây. Để sắp xếp, chỉ cần sử dụng đối số chính trong
    my_list = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
    
    my_list.sort(lambda x,y : cmp(x['name'], y['name']))
    
    5 để chuyển chức năng tùy chỉnh như dưới đây:

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

    Kiểm tra điều này.

    Tôi đã là một fan hâm mộ lớn của một bộ lọc với Lambda. Tuy nhiên, nó không phải là lựa chọn tốt nhất nếu bạn xem xét độ phức tạp về thời gian.

    Lựa chọn đầu tiên

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

    Sự lựa chọn thứ hai

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

    So sánh nhanh thời gian thực hiện

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

    1000000 vòng

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

    1000000 vòng

    Nếu hiệu suất là một mối quan tâm, tôi sẽ sử dụng

    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    29 thay vì
    my_list = sorted(my_list, key=lambda k: k['name'])
    
    0 vì các hàm tích hợp thực hiện nhanh hơn các hàm được làm thủ công. Hàm
    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    34 dường như hoạt động nhanh hơn khoảng 20% ​​so với
    my_list = sorted(my_list, key=lambda k: k['name'])
    
    0 dựa trên thử nghiệm của tôi.

    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

    my_list = sorted(my_list, key=lambda k: k['name'])
    
    0 so với
    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    34.

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

    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:

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

    Để sắp xếp danh sách từ điển theo khóa

    my_list = sorted(my_list, key=lambda k: k['name'])
    
    2,
    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    03 (như trong câu lệnh SQL
    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    56), bạn có thể sử dụng:
    (like in SQL statement
    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    56), you can use:

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

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

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

    newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 
    
    57

    .
    {'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

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

    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.

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

    Phương thức Sort () là một trong những cách bạn có thể sắp xếp một danh sách trong Python.Khi sử dụng Sort (), bạn sắp xếp một danh sách tại chỗ.Điều này có nghĩa là danh sách ban đầu được sửa đổi trực tiếp.Đặc biệt, thứ tự ban đầu của các yếu tố bị thay đổi.. When using sort() , you sort a list in-place. This means that the original list is directly modified. Specifially, the original order of elements is altered.

    Từ điển có lưu trữ dữ liệu theo thứ tự được sắp xếp không?

    Từ điển là một cấu trúc dữ liệu quan trọng lưu trữ dữ liệu bằng cách ánh xạ các khóa với các giá trị.Các từ điển mặc định trong Python là các cấu trúc dữ liệu không được đặt hàng.Giống như danh sách, chúng ta có thể sử dụng hàm Sắp xếp () để sắp xếp từ điển theo các khóa.Tuy nhiên, nó sẽ chỉ trả về một danh sách các khóa được sắp xếp, thường không phải là những gì chúng ta mong muốn.we can use the sorted() function to sort the dictionary by keys. However, it will only return a list of sorted keys, which is usually not what we desire.