Hướng dẫn python dict to sorted list - python dict đến danh sách đã sắp xếp

Các phím của Dict, được phân loại đảo ngược bởi các giá trị tương ứng, tốt nhất có thể được nhận là

sorted(adict, key=adict.get, reverse=True)

Vì bạn muốn các cặp khóa/giá trị, bạn có thể làm việc trên các mục như tất cả các câu trả lời khác đề xuất, hoặc (để sử dụng phương thức ràng buộc

$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' '[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]'
100000 loops, best of 3: 10.8 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6)); from operator import itemgetter' 'sorted(adict.iteritems(), key=itemgetter(1), reverse=True)'
100000 loops, best of 3: 9.66 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' 'sorted(adict.iteritems(), key=lambda (k,v): v, reverse=True)'
100000 loops, best of 3: 11.5 usec per loop
2 tiện lợi thay vì các mục tiêu hoặc Lambdas kỳ lạ ;-),

[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]

Chỉnh sửa: Về mặt hiệu suất, dù sao cũng không có nhiều điều:: in terms of performance, there isn't much into it either way:

$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' '[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]'
100000 loops, best of 3: 10.8 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6)); from operator import itemgetter' 'sorted(adict.iteritems(), key=itemgetter(1), reverse=True)'
100000 loops, best of 3: 9.66 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' 'sorted(adict.iteritems(), key=lambda (k,v): v, reverse=True)'
100000 loops, best of 3: 11.5 usec per loop

Vì vậy, giải pháp dựa trên ____ 23 có hiệu suất giữa hai loại dựa trên ____ 24-chậm hơn một chút so với

$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' '[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]'
100000 loops, best of 3: 10.8 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6)); from operator import itemgetter' 'sorted(adict.iteritems(), key=itemgetter(1), reverse=True)'
100000 loops, best of 3: 9.66 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' 'sorted(adict.iteritems(), key=lambda (k,v): v, reverse=True)'
100000 loops, best of 3: 11.5 usec per loop
5, nhanh hơn một chút so với
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' '[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]'
100000 loops, best of 3: 10.8 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6)); from operator import itemgetter' 'sorted(adict.iteritems(), key=itemgetter(1), reverse=True)'
100000 loops, best of 3: 9.66 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' 'sorted(adict.iteritems(), key=lambda (k,v): v, reverse=True)'
100000 loops, best of 3: 11.5 usec per loop
6. Trong các trường hợp "tắc nghẽn", trong đó các phân số micro giây đó rất quan trọng đối với bạn, bằng mọi cách đều tập trung vào điều đó. Trong các trường hợp bình thường, trong đó hoạt động này chỉ là một bước trong một số nhiệm vụ lớn hơn và ít nhiều quan trọng hơn hoặc ít hơn, tập trung vào sự đơn giản của thành ngữ ____27, tuy nhiên, cũng là một sự thay thế hợp lý.

Trong Python, việc sắp xếp một danh sách các từ điển với phương thức

$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' '[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]'
100000 loops, best of 3: 10.8 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6)); from operator import itemgetter' 'sorted(adict.iteritems(), key=itemgetter(1), reverse=True)'
100000 loops, best of 3: 9.66 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' 'sorted(adict.iteritems(), key=lambda (k,v): v, reverse=True)'
100000 loops, best of 3: 11.5 usec per loop
8 hoặc hàm
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' '[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]'
100000 loops, best of 3: 10.8 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6)); from operator import itemgetter' 'sorted(adict.iteritems(), key=itemgetter(1), reverse=True)'
100000 loops, best of 3: 9.66 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' 'sorted(adict.iteritems(), key=lambda (k,v): v, reverse=True)'
100000 loops, best of 3: 11.5 usec per loop
9 làm tăng lỗi
import pprint

l = [{'Name': 'Alice', 'Age': 40, 'Point': 80},
     {'Name': 'Bob', 'Age': 20},
     {'Name': 'Charlie', 'Age': 30, 'Point': 70}]
0 theo mặc định.

Bằng cách chỉ định tham số

import pprint

l = [{'Name': 'Alice', 'Age': 40, 'Point': 80},
     {'Name': 'Bob', 'Age': 20},
     {'Name': 'Charlie', 'Age': 30, 'Point': 70}]
1 của
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' '[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]'
100000 loops, best of 3: 10.8 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6)); from operator import itemgetter' 'sorted(adict.iteritems(), key=itemgetter(1), reverse=True)'
100000 loops, best of 3: 9.66 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' 'sorted(adict.iteritems(), key=lambda (k,v): v, reverse=True)'
100000 loops, best of 3: 11.5 usec per loop
8 hoặc
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' '[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]'
100000 loops, best of 3: 10.8 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6)); from operator import itemgetter' 'sorted(adict.iteritems(), key=itemgetter(1), reverse=True)'
100000 loops, best of 3: 9.66 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' 'sorted(adict.iteritems(), key=lambda (k,v): v, reverse=True)'
100000 loops, best of 3: 11.5 usec per loop
9, bạn có thể sắp xếp một danh sách các từ điển theo giá trị của khóa cụ thể.

Bài viết này mô tả các nội dung sau đây.

  • Sắp xếp danh sách các từ điển làm tăng lỗi theo mặc định
  • Chỉ định biểu thức Lambda cho tham số
    import pprint
    
    l = [{'Name': 'Alice', 'Age': 40, 'Point': 80},
         {'Name': 'Bob', 'Age': 20},
         {'Name': 'Charlie', 'Age': 30, 'Point': 70}]
    
    1
  • Chỉ định
    import pprint
    
    l = [{'Name': 'Alice', 'Age': 40, 'Point': 80},
         {'Name': 'Bob', 'Age': 20},
         {'Name': 'Charlie', 'Age': 30, 'Point': 70}]
    
    5 cho tham số
    import pprint
    
    l = [{'Name': 'Alice', 'Age': 40, 'Point': 80},
         {'Name': 'Bob', 'Age': 20},
         {'Name': 'Charlie', 'Age': 30, 'Point': 70}]
    
    1
  • Sắp xếp theo nhiều phím
  • import pprint
    
    l = [{'Name': 'Alice', 'Age': 40, 'Point': 80},
         {'Name': 'Bob', 'Age': 20},
         {'Name': 'Charlie', 'Age': 30, 'Point': 70}]
    
    7,
    import pprint
    
    l = [{'Name': 'Alice', 'Age': 40, 'Point': 80},
         {'Name': 'Bob', 'Age': 20},
         {'Name': 'Charlie', 'Age': 30, 'Point': 70}]
    
    8 cho một danh sách từ điển

Các mã mẫu sau đây sử dụng danh sách các từ điển với các khóa chung. Mô -đun Pprint được sử dụng để làm cho đầu ra dễ đọc hơn.

  • Bản in đẹp với pprint trong Python

import pprint

l = [{'Name': 'Alice', 'Age': 40, 'Point': 80},
     {'Name': 'Bob', 'Age': 20},
     {'Name': 'Charlie', 'Age': 30, 'Point': 70}]

Sắp xếp danh sách các từ điển làm tăng lỗi theo mặc định

Chỉ định biểu thức Lambda cho tham số

import pprint

l = [{'Name': 'Alice', 'Age': 40, 'Point': 80},
     {'Name': 'Bob', 'Age': 20},
     {'Name': 'Charlie', 'Age': 30, 'Point': 70}]
1

Chỉ định

import pprint

l = [{'Name': 'Alice', 'Age': 40, 'Point': 80},
     {'Name': 'Bob', 'Age': 20},
     {'Name': 'Charlie', 'Age': 30, 'Point': 70}]
5 cho tham số
import pprint

l = [{'Name': 'Alice', 'Age': 40, 'Point': 80},
     {'Name': 'Bob', 'Age': 20},
     {'Name': 'Charlie', 'Age': 30, 'Point': 70}]
1

# sorted(l)
# TypeError: '<' not supported between instances of 'dict' and 'dict'

Chỉ định biểu thức Lambda cho tham số import pprint l = [{'Name': 'Alice', 'Age': 40, 'Point': 80}, {'Name': 'Bob', 'Age': 20}, {'Name': 'Charlie', 'Age': 30, 'Point': 70}] 1

Chỉ định

import pprint

l = [{'Name': 'Alice', 'Age': 40, 'Point': 80},
     {'Name': 'Bob', 'Age': 20},
     {'Name': 'Charlie', 'Age': 30, 'Point': 70}]
5 cho tham số
import pprint

l = [{'Name': 'Alice', 'Age': 40, 'Point': 80},
     {'Name': 'Bob', 'Age': 20},
     {'Name': 'Charlie', 'Age': 30, 'Point': 70}]
1

Sắp xếp theo nhiều phím

  • import pprint
    
    l = [{'Name': 'Alice', 'Age': 40, 'Point': 80},
         {'Name': 'Bob', 'Age': 20},
         {'Name': 'Charlie', 'Age': 30, 'Point': 70}]
    
    7,
    import pprint
    
    l = [{'Name': 'Alice', 'Age': 40, 'Point': 80},
         {'Name': 'Bob', 'Age': 20},
         {'Name': 'Charlie', 'Age': 30, 'Point': 70}]
    
    8 cho một danh sách từ điển

Các mã mẫu sau đây sử dụng danh sách các từ điển với các khóa chung. Mô -đun Pprint được sử dụng để làm cho đầu ra dễ đọc hơn.

Bản in đẹp với pprint trong Python

  • Sắp xếp danh sách các từ điển (
    import pprint
    
    l = [{'Name': 'Alice', 'Age': 40, 'Point': 80},
         {'Name': 'Bob', 'Age': 20},
         {'Name': 'Charlie', 'Age': 30, 'Point': 70}]
    
    9) bằng phương thức
    $ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' '[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]'
    100000 loops, best of 3: 10.8 usec per loop
    $ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6)); from operator import itemgetter' 'sorted(adict.iteritems(), key=itemgetter(1), reverse=True)'
    100000 loops, best of 3: 9.66 usec per loop
    $ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' 'sorted(adict.iteritems(), key=lambda (k,v): v, reverse=True)'
    100000 loops, best of 3: 11.5 usec per loop
    
    8 hoặc hàm
    $ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' '[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]'
    100000 loops, best of 3: 10.8 usec per loop
    $ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6)); from operator import itemgetter' 'sorted(adict.iteritems(), key=itemgetter(1), reverse=True)'
    100000 loops, best of 3: 9.66 usec per loop
    $ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' 'sorted(adict.iteritems(), key=lambda (k,v): v, reverse=True)'
    100000 loops, best of 3: 11.5 usec per loop
    
    9 làm tăng lỗi
    import pprint
    
    l = [{'Name': 'Alice', 'Age': 40, 'Point': 80},
         {'Name': 'Bob', 'Age': 20},
         {'Name': 'Charlie', 'Age': 30, 'Point': 70}]
    
    0 theo mặc định.

pprint.pprint(sorted(l, key=lambda x: x['Age']))
# [{'Age': 20, 'Name': 'Bob'},
#  {'Age': 30, 'Name': 'Charlie', 'Point': 70},
#  {'Age': 40, 'Name': 'Alice', 'Point': 80}]

pprint.pprint(sorted(l, key=lambda x: x['Name']))
# [{'Age': 40, 'Name': 'Alice', 'Point': 80},
#  {'Age': 20, 'Name': 'Bob'},
#  {'Age': 30, 'Name': 'Charlie', 'Point': 70}]

Điều này là do từ điển không hỗ trợ so sánh với

# sorted(l)
# TypeError: '<' not supported between instances of 'dict' and 'dict'
3,
# sorted(l)
# TypeError: '<' not supported between instances of 'dict' and 'dict'
4, v.v.

pprint.pprint(sorted(l, key=lambda x: x['Age'], reverse=True))
# [{'Age': 40, 'Name': 'Alice', 'Point': 80},
#  {'Age': 30, 'Name': 'Charlie', 'Point': 70},
#  {'Age': 20, 'Name': 'Bob'}]

Để sắp xếp danh sách các từ điển theo giá trị của khóa cụ thể, chỉ định tham số

import pprint

l = [{'Name': 'Alice', 'Age': 40, 'Point': 80},
     {'Name': 'Bob', 'Age': 20},
     {'Name': 'Charlie', 'Age': 30, 'Point': 70}]
1 của phương thức
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' '[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]'
100000 loops, best of 3: 10.8 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6)); from operator import itemgetter' 'sorted(adict.iteritems(), key=itemgetter(1), reverse=True)'
100000 loops, best of 3: 9.66 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' 'sorted(adict.iteritems(), key=lambda (k,v): v, reverse=True)'
100000 loops, best of 3: 11.5 usec per loop
8 hoặc hàm
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' '[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]'
100000 loops, best of 3: 10.8 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6)); from operator import itemgetter' 'sorted(adict.iteritems(), key=itemgetter(1), reverse=True)'
100000 loops, best of 3: 9.66 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' 'sorted(adict.iteritems(), key=lambda (k,v): v, reverse=True)'
100000 loops, best of 3: 11.5 usec per loop
9.

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 đó. Xem bài viết sau đây để biết thêm thông tin.

  • Cách sử dụng tham số khóa trong Python (Sắp xếp, tối đa, v.v.)

Trong ví dụ này, bạn có thể chỉ định một hàm để lấy giá trị của một khóa cụ thể từ từ điển.

Bạn có thể xác định một hàm với

# sorted(l)
# TypeError: '<' not supported between instances of 'dict' and 'dict'
9, nhưng thuận tiện khi sử dụng các biểu thức lambda trong trường hợp như vậy.

# sorted(l, key=lambda x: x['Point'])
# KeyError: 'Point'

Biểu cảm lambda trong python

  • Chỉ định nên sắp xếp theo thứ tự giảm dần hoặc tăng dần với tham số
    pprint.pprint(sorted(l, key=lambda x: x['Age']))
    # [{'Age': 20, 'Name': 'Bob'},
    #  {'Age': 30, 'Name': 'Charlie', 'Point': 70},
    #  {'Age': 40, 'Name': 'Alice', 'Point': 80}]
    
    pprint.pprint(sorted(l, key=lambda x: x['Name']))
    # [{'Age': 40, 'Name': 'Alice', 'Point': 80},
    #  {'Age': 20, 'Name': 'Bob'},
    #  {'Age': 30, 'Name': 'Charlie', 'Point': 70}]
    
    0.

Các ví dụ cho đến nay sử dụng

$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' '[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]'
100000 loops, best of 3: 10.8 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6)); from operator import itemgetter' 'sorted(adict.iteritems(), key=itemgetter(1), reverse=True)'
100000 loops, best of 3: 9.66 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' 'sorted(adict.iteritems(), key=lambda (k,v): v, reverse=True)'
100000 loops, best of 3: 11.5 usec per loop
9, nhưng bạn có thể chỉ định
import pprint

l = [{'Name': 'Alice', 'Age': 40, 'Point': 80},
     {'Name': 'Bob', 'Age': 20},
     {'Name': 'Charlie', 'Age': 30, 'Point': 70}]
1 và
pprint.pprint(sorted(l, key=lambda x: x['Age']))
# [{'Age': 20, 'Name': 'Bob'},
#  {'Age': 30, 'Name': 'Charlie', 'Point': 70},
#  {'Age': 40, 'Name': 'Alice', 'Point': 80}]

pprint.pprint(sorted(l, key=lambda x: x['Name']))
# [{'Age': 40, 'Name': 'Alice', 'Point': 80},
#  {'Age': 20, 'Name': 'Bob'},
#  {'Age': 30, 'Name': 'Charlie', 'Point': 70}]
0 theo cùng một cách với phương pháp
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' '[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]'
100000 loops, best of 3: 10.8 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6)); from operator import itemgetter' 'sorted(adict.iteritems(), key=itemgetter(1), reverse=True)'
100000 loops, best of 3: 9.66 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' 'sorted(adict.iteritems(), key=lambda (k,v): v, reverse=True)'
100000 loops, best of 3: 11.5 usec per loop
8 của
pprint.pprint(sorted(l, key=lambda x: x['Age']))
# [{'Age': 20, 'Name': 'Bob'},
#  {'Age': 30, 'Name': 'Charlie', 'Point': 70},
#  {'Age': 40, 'Name': 'Alice', 'Point': 80}]

pprint.pprint(sorted(l, key=lambda x: x['Name']))
# [{'Age': 40, 'Name': 'Alice', 'Point': 80},
#  {'Age': 20, 'Name': 'Bob'},
#  {'Age': 30, 'Name': 'Charlie', 'Point': 70}]
5.

# sorted(l, key=lambda x: x.get('Point'))
# TypeError: '<' not supported between instances of 'int' and 'NoneType'

Để biết sự khác biệt giữa

$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' '[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]'
100000 loops, best of 3: 10.8 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6)); from operator import itemgetter' 'sorted(adict.iteritems(), key=itemgetter(1), reverse=True)'
100000 loops, best of 3: 9.66 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' 'sorted(adict.iteritems(), key=lambda (k,v): v, reverse=True)'
100000 loops, best of 3: 11.5 usec per loop
8 và
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' '[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]'
100000 loops, best of 3: 10.8 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6)); from operator import itemgetter' 'sorted(adict.iteritems(), key=itemgetter(1), reverse=True)'
100000 loops, best of 3: 9.66 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' 'sorted(adict.iteritems(), key=lambda (k,v): v, reverse=True)'
100000 loops, best of 3: 11.5 usec per loop
9, hãy xem bài viết sau.
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' '[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]'
100000 loops, best of 3: 10.8 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6)); from operator import itemgetter' 'sorted(adict.iteritems(), key=itemgetter(1), reverse=True)'
100000 loops, best of 3: 9.66 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' 'sorted(adict.iteritems(), key=lambda (k,v): v, reverse=True)'
100000 loops, best of 3: 11.5 usec per loop
8 sắp xếp chính đối tượng gốc và
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' '[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]'
100000 loops, best of 3: 10.8 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6)); from operator import itemgetter' 'sorted(adict.iteritems(), key=itemgetter(1), reverse=True)'
100000 loops, best of 3: 9.66 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' 'sorted(adict.iteritems(), key=lambda (k,v): v, reverse=True)'
100000 loops, best of 3: 11.5 usec per loop
9 tạo ra một đối tượng được sắp xếp mới.

pprint.pprint(sorted(l, key=lambda x: x.get('Point', 75)))
# [{'Age': 30, 'Name': 'Charlie', 'Point': 70},
#  {'Age': 20, 'Name': 'Bob'},
#  {'Age': 40, 'Name': 'Alice', 'Point': 80}]

Sắp xếp một danh sách, chuỗi, tuple trong python (sắp xếp, sắp xếp)

  • Khi khóa được chỉ định không tồn tại

[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]
0

Chỉ định import pprint l = [{'Name': 'Alice', 'Age': 40, 'Point': 80}, {'Name': 'Bob', 'Age': 20}, {'Name': 'Charlie', 'Age': 30, 'Point': 70}] 5 cho tham số import pprint l = [{'Name': 'Alice', 'Age': 40, 'Point': 80}, {'Name': 'Bob', 'Age': 20}, {'Name': 'Charlie', 'Age': 30, 'Point': 70}] 1

Sắp xếp theo nhiều phím

  • import pprint
    
    l = [{'Name': 'Alice', 'Age': 40, 'Point': 80},
         {'Name': 'Bob', 'Age': 20},
         {'Name': 'Charlie', 'Age': 30, 'Point': 70}]
    
    7,
    import pprint
    
    l = [{'Name': 'Alice', 'Age': 40, 'Point': 80},
         {'Name': 'Bob', 'Age': 20},
         {'Name': 'Charlie', 'Age': 30, 'Point': 70}]
    
    8 cho một danh sách từ điển

[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]
1

Các mã mẫu sau đây sử dụng danh sách các từ điển với các khóa chung. Mô -đun Pprint được sử dụng để làm cho đầu ra dễ đọc hơn.

[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]
2

Sắp xếp theo nhiều phím

import pprint

l = [{'Name': 'Alice', 'Age': 40, 'Point': 80},
     {'Name': 'Bob', 'Age': 20},
     {'Name': 'Charlie', 'Age': 30, 'Point': 70}]
7,
import pprint

l = [{'Name': 'Alice', 'Age': 40, 'Point': 80},
     {'Name': 'Bob', 'Age': 20},
     {'Name': 'Charlie', 'Age': 30, 'Point': 70}]
8 cho một danh sách từ điển

[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]
3

Các mã mẫu sau đây sử dụng danh sách các từ điển với các khóa chung. Mô -đun Pprint được sử dụng để làm cho đầu ra dễ đọc hơn.

[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]
4

Bản in đẹp với pprint trong Python

[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]
5

Sắp xếp danh sách các từ điển (

import pprint

l = [{'Name': 'Alice', 'Age': 40, 'Point': 80},
     {'Name': 'Bob', 'Age': 20},
     {'Name': 'Charlie', 'Age': 30, 'Point': 70}]
9) bằng phương thức
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' '[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]'
100000 loops, best of 3: 10.8 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6)); from operator import itemgetter' 'sorted(adict.iteritems(), key=itemgetter(1), reverse=True)'
100000 loops, best of 3: 9.66 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' 'sorted(adict.iteritems(), key=lambda (k,v): v, reverse=True)'
100000 loops, best of 3: 11.5 usec per loop
8 hoặc hàm
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' '[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]'
100000 loops, best of 3: 10.8 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6)); from operator import itemgetter' 'sorted(adict.iteritems(), key=itemgetter(1), reverse=True)'
100000 loops, best of 3: 9.66 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' 'sorted(adict.iteritems(), key=lambda (k,v): v, reverse=True)'
100000 loops, best of 3: 11.5 usec per loop
9 làm tăng lỗi
import pprint

l = [{'Name': 'Alice', 'Age': 40, 'Point': 80},
     {'Name': 'Bob', 'Age': 20},
     {'Name': 'Charlie', 'Age': 30, 'Point': 70}]
0 theo mặc định.

[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]
6

Điều này là do từ điển không hỗ trợ so sánh với

# sorted(l)
# TypeError: '<' not supported between instances of 'dict' and 'dict'
3,
# sorted(l)
# TypeError: '<' not supported between instances of 'dict' and 'dict'
4, v.v.

[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]
7

import pprint l = [{'Name': 'Alice', 'Age': 40, 'Point': 80}, {'Name': 'Bob', 'Age': 20}, {'Name': 'Charlie', 'Age': 30, 'Point': 70}] 7, import pprint l = [{'Name': 'Alice', 'Age': 40, 'Point': 80}, {'Name': 'Bob', 'Age': 20}, {'Name': 'Charlie', 'Age': 30, 'Point': 70}] 8 cho một danh sách từ điển

Các mã mẫu sau đây sử dụng danh sách các từ điển với các khóa chung. Mô -đun Pprint được sử dụng để làm cho đầu ra dễ đọc hơn.

[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]
8

Bản in đẹp với pprint trong Python

[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]
9

Sắp xếp danh sách các từ điển (

import pprint

l = [{'Name': 'Alice', 'Age': 40, 'Point': 80},
     {'Name': 'Bob', 'Age': 20},
     {'Name': 'Charlie', 'Age': 30, 'Point': 70}]
9) bằng phương thức
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' '[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]'
100000 loops, best of 3: 10.8 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6)); from operator import itemgetter' 'sorted(adict.iteritems(), key=itemgetter(1), reverse=True)'
100000 loops, best of 3: 9.66 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' 'sorted(adict.iteritems(), key=lambda (k,v): v, reverse=True)'
100000 loops, best of 3: 11.5 usec per loop
8 hoặc hàm
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' '[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]'
100000 loops, best of 3: 10.8 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6)); from operator import itemgetter' 'sorted(adict.iteritems(), key=itemgetter(1), reverse=True)'
100000 loops, best of 3: 9.66 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' 'sorted(adict.iteritems(), key=lambda (k,v): v, reverse=True)'
100000 loops, best of 3: 11.5 usec per loop
9 làm tăng lỗi
import pprint

l = [{'Name': 'Alice', 'Age': 40, 'Point': 80},
     {'Name': 'Bob', 'Age': 20},
     {'Name': 'Charlie', 'Age': 30, 'Point': 70}]
0 theo mặc định.

$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' '[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]'
100000 loops, best of 3: 10.8 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6)); from operator import itemgetter' 'sorted(adict.iteritems(), key=itemgetter(1), reverse=True)'
100000 loops, best of 3: 9.66 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' 'sorted(adict.iteritems(), key=lambda (k,v): v, reverse=True)'
100000 loops, best of 3: 11.5 usec per loop
0

Tất nhiên, bạn cũng có thể sử dụng

import pprint

l = [{'Name': 'Alice', 'Age': 40, 'Point': 80},
     {'Name': 'Bob', 'Age': 20},
     {'Name': 'Charlie', 'Age': 30, 'Point': 70}]
5.

$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' '[(k, adict[k]) for k in sorted(adict, key=adict.get, reverse=True)]'
100000 loops, best of 3: 10.8 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6)); from operator import itemgetter' 'sorted(adict.iteritems(), key=itemgetter(1), reverse=True)'
100000 loops, best of 3: 9.66 usec per loop
$ python -mtimeit -s'adict=dict((x,x**2) for x in range(-5,6))' 'sorted(adict.iteritems(), key=lambda (k,v): v, reverse=True)'
100000 loops, best of 3: 11.5 usec per loop
1

Làm cách nào để biến một từ điển thành một danh sách được sắp xếp trong Python?

Để sắp xếp chính xác một từ điển theo giá trị bằng phương thức Sắp xếp (), bạn sẽ phải thực hiện như sau: chuyển từ điển sang phương thức Sắp xếp () làm giá trị đầu tiên. Sử dụng phương thức mục () trên từ điển để truy xuất các khóa và giá trị của nó. Viết hàm lambda để lấy các giá trị được truy xuất với phương thức item ().pass the dictionary to the sorted() method as the first value. use the items() method on the dictionary to retrieve its keys and values. write a lambda function to get the values retrieved with the item() method.

Từ điển có thể được sắp xếp Python khô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.Cũng giống như với các phép lặp khác, chúng ta có thể sắp xếp từ điển dựa trên các tiêu chí khác nhau tùy thuộc vào đối số chính của hàm Sắp xếp ().we are also able to sort dictionaries using python's built-in sorted() function. Just like with other iterables, we can sort dictionaries based on different criteria depending on the key argument of the sorted() function.

Làm cách nào để thay đổi một từ điển thành một danh sách?

Từ điển để liệt kê bằng phương thức .Items () của từ điển được sử dụng để lặp lại thông qua tất cả các cặp giá trị khóa của từ điển.Theo mặc định, chúng được lưu trữ dưới dạng tuple (khóa, giá trị) trong trình lặp.Sử dụng danh sách () sẽ giúp bạn tất cả các mục được chuyển đổi thành một danh sách.Using . items() method of the dictionary is used to iterate through all the key-value pairs of the dictionary. By default, they are stored as a tuple (key, value) in the iterator. Using list() will get you all the items converted to a list.

Làm thế nào để bạn sắp xếp một từ điển theo giá trị theo thứ tự giảm dần Python?

Trực quan hóa thực thi mã Python:..
Sử dụng dict.Các mục () để có được một danh sách các cặp Tuple từ D và sắp xếp nó bằng hàm Lambda và Sắp xếp () ..
Sử dụng Dict () để chuyển đổi danh sách được sắp xếp trở lại từ điển ..
Sử dụng tham số ngược trong Sắp xếp () để sắp xếp từ điển theo thứ tự ngược lại, dựa trên đối số thứ hai ..