Hướng dẫn sort dictionary by multiple values python - sắp xếp từ điển theo nhiều giá trị python

Tôi có từ điển

# lambda r: r[1][2]
# r == ['John Adams', ['111223333', 'A', 91.0]]
# r[1] == ['111223333', 'A', 91.0]
# r[1][2] == 91.0
#
d = {
    'John Adams': ['111223333', 'A', 91.0],
    'Willy Smith Jr.': ['222114444', 'C', 77.55],
    'Phil Jordan': ['777886666', 'F', 59.5]
}

for key, value in sorted[d.items[], key=lambda r: r[1][2]]:
    print[key, value]
4

Tôi cần phải sắp xếp từ điển này đầu tiên bằng số, sau đó trong đó, theo thứ tự bảng chữ cái. Nếu 2 mục có cùng một khóa số, chúng cần được sắp xếp theo thứ tự bảng chữ cái.

Đầu ra của điều này phải là

# lambda r: r[1][2]
# r == ['John Adams', ['111223333', 'A', 91.0]]
# r[1] == ['111223333', 'A', 91.0]
# r[1][2] == 91.0
#
d = {
    'John Adams': ['111223333', 'A', 91.0],
    'Willy Smith Jr.': ['222114444', 'C', 77.55],
    'Phil Jordan': ['777886666', 'F', 59.5]
}

for key, value in sorted[d.items[], key=lambda r: r[1][2]]:
    print[key, value]
5

Tôi đã thử sử dụng lambda, danh sách hiểu, v.v. nhưng dường như tôi không thể khiến chúng sắp xếp chính xác.

Bhargav Rao

47.8K27 Huy hiệu vàng123 Huy hiệu bạc138 Huy hiệu Đồng27 gold badges123 silver badges138 bronze badges

Đã hỏi ngày 9 tháng 12 năm 2015 lúc 4:04Dec 9, 2015 at 4:04

Sử dụng

# lambda r: r[1][2]
# r == ['John Adams', ['111223333', 'A', 91.0]]
# r[1] == ['111223333', 'A', 91.0]
# r[1][2] == 91.0
#
d = {
    'John Adams': ['111223333', 'A', 91.0],
    'Willy Smith Jr.': ['222114444', 'C', 77.55],
    'Phil Jordan': ['777886666', 'F', 59.5]
}

for key, value in sorted[d.items[], key=lambda r: r[1][2]]:
    print[key, value]
6 với hàm khóa [thứ tự theo giá trị [
# lambda r: r[1][2]
# r == ['John Adams', ['111223333', 'A', 91.0]]
# r[1] == ['111223333', 'A', 91.0]
# r[1][2] == 91.0
#
d = {
    'John Adams': ['111223333', 'A', 91.0],
    'Willy Smith Jr.': ['222114444', 'C', 77.55],
    'Phil Jordan': ['777886666', 'F', 59.5]
}

for key, value in sorted[d.items[], key=lambda r: r[1][2]]:
    print[key, value]
7] trước tiên, sau đó là khóa
# lambda r: r[1][2]
# r == ['John Adams', ['111223333', 'A', 91.0]]
# r[1] == ['111223333', 'A', 91.0]
# r[1][2] == 91.0
#
d = {
    'John Adams': ['111223333', 'A', 91.0],
    'Willy Smith Jr.': ['222114444', 'C', 77.55],
    'Phil Jordan': ['777886666', 'F', 59.5]
}

for key, value in sorted[d.items[], key=lambda r: r[1][2]]:
    print[key, value]
8]:

>>> d = {'Bill': 4, 'Alex' : 4, 'Bob' : 3, "Charles": 7}    
>>> sorted[d, key=lambda k: [d[k], k]]
['Bob', 'Alex', 'Bill', 'Charles']

Đã trả lời ngày 9 tháng 12 năm 2015 lúc 4:11Dec 9, 2015 at 4:11

Falsetrufalsetrufalsetru

346K60 Huy hiệu vàng691 Huy hiệu bạc614 Huy hiệu đồng60 gold badges691 silver badges614 bronze badges

3

Sắp xếp trên các mục của từ điển [là bộ dữ liệu] bằng cách sử dụng

# lambda r: r[1][2]
# r == ['John Adams', ['111223333', 'A', 91.0]]
# r[1] == ['111223333', 'A', 91.0]
# r[1][2] == 91.0
#
d = {
    'John Adams': ['111223333', 'A', 91.0],
    'Willy Smith Jr.': ['222114444', 'C', 77.55],
    'Phil Jordan': ['777886666', 'F', 59.5]
}

for key, value in sorted[d.items[], key=lambda r: r[1][2]]:
    print[key, value]
9. Bạn có thể chỉ định phím sắp xếp theo giá trị của từ điển và sau đó là các khóa của nó:

>>> d = {'Bill': 4, 'Alex' : 4, 'Bob' : 3, "Charles": 7}
>>> sorted[d.items[], key=lambda x:[x[1],x[0]]]
[['Bob', 3], ['Alex', 4], ['Bill', 4], ['Charles', 7]]
>>> [t[0] for t in sorted[d.items[], key=lambda x:[x[1],x[0]]]]
['Bob', 'Alex', 'Bill', 'Charles']

Đã trả lời ngày 9 tháng 12 năm 2015 lúc 4:08Dec 9, 2015 at 4:08

Mhawkemhawkemhawke

82.1K9 Huy hiệu vàng113 Huy hiệu bạc135 Huy hiệu Đồng9 gold badges113 silver badges135 bronze badges

Sử dụng một lambda làm chức năng sắp xếp của bạn.

# lambda r: r[1][2]
# r == ['John Adams', ['111223333', 'A', 91.0]]
# r[1] == ['111223333', 'A', 91.0]
# r[1][2] == 91.0
#
d = {
    'John Adams': ['111223333', 'A', 91.0],
    'Willy Smith Jr.': ['222114444', 'C', 77.55],
    'Phil Jordan': ['777886666', 'F', 59.5]
}

for key, value in sorted[d.items[], key=lambda r: r[1][2]]:
    print[key, value]

Produces:

['Phil Jordan', ['777886666', 'F', 59.5]]
['Willy Smith Jr.', ['222114444', 'C', 77.55]]
['John Adams', ['111223333', 'A', 91.0]]

Nhân tiện, nếu bạn kết thúc với nhiều mục chia sẻ cùng một giá trị sắp xếp, bạn có thể xây dựng một loại hỗn hợp [thứ cấp, cấp ba, v.v.]. Lambda của bạn chỉ nên trả lại một tuple:

['Phil Jordan', ['777886666', 'F', 59.5]]
['Willy Smith Jr.', ['222114444', 'C', 77.55]]
['John Adams', ['111223333', 'A', 91.0]]
0, sẽ sắp xếp theo giá trị cuối cùng đó, và sau đó theo tên nếu nhiều giá trị bằng nhau.

Đây là không có Lambda:

def key_func[key_value_tuple]:
    name = key_value_tuple[0]
    long_str_num, a_to_f, number = key_value_tuple[1]
    return [number, name]

d = {
    'John Adams': ['111223333', 'A', 91.0],
    'Willy Smith Jr.': ['222114444', 'C', 77.55],
    'Phil Jordan': ['777886666', 'F', 59.5]
}

for key, value in sorted[d.items[], key=key_func]:
    print[key, value]

Chỉnh sửa: Đã thêm tùy chọn không phải Lambda.

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

['Phil Jordan', ['777886666', 'F', 59.5]]
['Willy Smith Jr.', ['222114444', 'C', 77.55]]
['John Adams', ['111223333', 'A', 91.0]]
1 hoặc hàm
# lambda r: r[1][2]
# r == ['John Adams', ['111223333', 'A', 91.0]]
# r[1] == ['111223333', 'A', 91.0]
# r[1][2] == 91.0
#
d = {
    'John Adams': ['111223333', 'A', 91.0],
    'Willy Smith Jr.': ['222114444', 'C', 77.55],
    'Phil Jordan': ['777886666', 'F', 59.5]
}

for key, value in sorted[d.items[], key=lambda r: r[1][2]]:
    print[key, value]
9 làm tăng lỗi
['Phil Jordan', ['777886666', 'F', 59.5]]
['Willy Smith Jr.', ['222114444', 'C', 77.55]]
['John Adams', ['111223333', 'A', 91.0]]
3 theo mặc định.

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

['Phil Jordan', ['777886666', 'F', 59.5]]
['Willy Smith Jr.', ['222114444', 'C', 77.55]]
['John Adams', ['111223333', 'A', 91.0]]
4 của
['Phil Jordan', ['777886666', 'F', 59.5]]
['Willy Smith Jr.', ['222114444', 'C', 77.55]]
['John Adams', ['111223333', 'A', 91.0]]
1 hoặc
# lambda r: r[1][2]
# r == ['John Adams', ['111223333', 'A', 91.0]]
# r[1] == ['111223333', 'A', 91.0]
# r[1][2] == 91.0
#
d = {
    'John Adams': ['111223333', 'A', 91.0],
    'Willy Smith Jr.': ['222114444', 'C', 77.55],
    'Phil Jordan': ['777886666', 'F', 59.5]
}

for key, value in sorted[d.items[], key=lambda r: r[1][2]]:
    print[key, value]
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ố
    ['Phil Jordan', ['777886666', 'F', 59.5]]
    ['Willy Smith Jr.', ['222114444', 'C', 77.55]]
    ['John Adams', ['111223333', 'A', 91.0]]
    
    4
  • Chỉ định
    ['Phil Jordan', ['777886666', 'F', 59.5]]
    ['Willy Smith Jr.', ['222114444', 'C', 77.55]]
    ['John Adams', ['111223333', 'A', 91.0]]
    
    8 cho tham số
    ['Phil Jordan', ['777886666', 'F', 59.5]]
    ['Willy Smith Jr.', ['222114444', 'C', 77.55]]
    ['John Adams', ['111223333', 'A', 91.0]]
    
    4
  • Sắp xếp theo nhiều phím
  • def key_func[key_value_tuple]:
        name = key_value_tuple[0]
        long_str_num, a_to_f, number = key_value_tuple[1]
        return [number, name]
    
    d = {
        'John Adams': ['111223333', 'A', 91.0],
        'Willy Smith Jr.': ['222114444', 'C', 77.55],
        'Phil Jordan': ['777886666', 'F', 59.5]
    }
    
    for key, value in sorted[d.items[], key=key_func]:
        print[key, value]
    
    0,
    def key_func[key_value_tuple]:
        name = key_value_tuple[0]
        long_str_num, a_to_f, number = key_value_tuple[1]
        return [number, name]
    
    d = {
        'John Adams': ['111223333', 'A', 91.0],
        'Willy Smith Jr.': ['222114444', 'C', 77.55],
        'Phil Jordan': ['777886666', 'F', 59.5]
    }
    
    for key, value in sorted[d.items[], key=key_func]:
        print[key, value]
    
    1 cho một danh sách các từ điển

Như đã đề cập ở trên, các so sánh với

def key_func[key_value_tuple]:
    name = key_value_tuple[0]
    long_str_num, a_to_f, number = key_value_tuple[1]
    return [number, name]

d = {
    'John Adams': ['111223333', 'A', 91.0],
    'Willy Smith Jr.': ['222114444', 'C', 77.55],
    'Phil Jordan': ['777886666', 'F', 59.5]
}

for key, value in sorted[d.items[], key=key_func]:
    print[key, value]
6 hoặc
def key_func[key_value_tuple]:
    name = key_value_tuple[0]
    long_str_num, a_to_f, number = key_value_tuple[1]
    return [number, name]

d = {
    'John Adams': ['111223333', 'A', 91.0],
    'Willy Smith Jr.': ['222114444', 'C', 77.55],
    'Phil Jordan': ['777886666', 'F', 59.5]
}

for key, value in sorted[d.items[], key=key_func]:
    print[key, value]
7 không được hỗ trợ cho từ điển
def key_func[key_value_tuple]:
    name = key_value_tuple[0]
    long_str_num, a_to_f, number = key_value_tuple[1]
    return [number, name]

d = {
    'John Adams': ['111223333', 'A', 91.0],
    'Willy Smith Jr.': ['222114444', 'C', 77.55],
    'Phil Jordan': ['777886666', 'F', 59.5]
}

for key, value in sorted[d.items[], key=key_func]:
    print[key, value]
2, do đó, chuyển danh sách các từ điển đến
def key_func[key_value_tuple]:
    name = key_value_tuple[0]
    long_str_num, a_to_f, number = key_value_tuple[1]
    return [number, name]

d = {
    'John Adams': ['111223333', 'A', 91.0],
    'Willy Smith Jr.': ['222114444', 'C', 77.55],
    'Phil Jordan': ['777886666', 'F', 59.5]
}

for key, value in sorted[d.items[], key=key_func]:
    print[key, value]
0 hoặc
def key_func[key_value_tuple]:
    name = key_value_tuple[0]
    long_str_num, a_to_f, number = key_value_tuple[1]
    return [number, name]

d = {
    'John Adams': ['111223333', 'A', 91.0],
    'Willy Smith Jr.': ['222114444', 'C', 77.55],
    'Phil Jordan': ['777886666', 'F', 59.5]
}

for key, value in sorted[d.items[], key=key_func]:
    print[key, value]
1 gây ra lỗi.

  • Như với
    # lambda r: r[1][2]
    # r == ['John Adams', ['111223333', 'A', 91.0]]
    # r[1] == ['111223333', 'A', 91.0]
    # r[1][2] == 91.0
    #
    d = {
        'John Adams': ['111223333', 'A', 91.0],
        'Willy Smith Jr.': ['222114444', 'C', 77.55],
        'Phil Jordan': ['777886666', 'F', 59.5]
    }
    
    for key, value in sorted[d.items[], key=lambda r: r[1][2]]:
        print[key, value]
    
    9 và
    ['Phil Jordan', ['777886666', 'F', 59.5]]
    ['Willy Smith Jr.', ['222114444', 'C', 77.55]]
    ['John Adams', ['111223333', 'A', 91.0]]
    
    1, bạn cũng có thể chỉ định tham số
    ['Phil Jordan', ['777886666', 'F', 59.5]]
    ['Willy Smith Jr.', ['222114444', 'C', 77.55]]
    ['John Adams', ['111223333', 'A', 91.0]]
    
    4 trong
    def key_func[key_value_tuple]:
        name = key_value_tuple[0]
        long_str_num, a_to_f, number = key_value_tuple[1]
        return [number, name]
    
    d = {
        'John Adams': ['111223333', 'A', 91.0],
        'Willy Smith Jr.': ['222114444', 'C', 77.55],
        'Phil Jordan': ['777886666', 'F', 59.5]
    }
    
    for key, value in sorted[d.items[], key=key_func]:
        print[key, value]
    
    0 và
    def key_func[key_value_tuple]:
        name = key_value_tuple[0]
        long_str_num, a_to_f, number = key_value_tuple[1]
        return [number, name]
    
    d = {
        'John Adams': ['111223333', 'A', 91.0],
        'Willy Smith Jr.': ['222114444', 'C', 77.55],
        'Phil Jordan': ['777886666', 'F', 59.5]
    }
    
    for key, value in sorted[d.items[], key=key_func]:
        print[key, value]
    
    1.

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

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

def key_func[key_value_tuple]:
    name = key_value_tuple[0]
    long_str_num, a_to_f, number = key_value_tuple[1]
    return [number, name]

d = {
    'John Adams': ['111223333', 'A', 91.0],
    'Willy Smith Jr.': ['222114444', 'C', 77.55],
    'Phil Jordan': ['777886666', 'F', 59.5]
}

for key, value in sorted[d.items[], key=key_func]:
    print[key, value]
2] bằng phương thức
['Phil Jordan', ['777886666', 'F', 59.5]]
['Willy Smith Jr.', ['222114444', 'C', 77.55]]
['John Adams', ['111223333', 'A', 91.0]]
1 hoặc hàm
# lambda r: r[1][2]
# r == ['John Adams', ['111223333', 'A', 91.0]]
# r[1] == ['111223333', 'A', 91.0]
# r[1][2] == 91.0
#
d = {
    'John Adams': ['111223333', 'A', 91.0],
    'Willy Smith Jr.': ['222114444', 'C', 77.55],
    'Phil Jordan': ['777886666', 'F', 59.5]
}

for key, value in sorted[d.items[], key=lambda r: r[1][2]]:
    print[key, value]
9 làm tăng lỗi
['Phil Jordan', ['777886666', 'F', 59.5]]
['Willy Smith Jr.', ['222114444', 'C', 77.55]]
['John Adams', ['111223333', 'A', 91.0]]
3 theo mặc định.

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

def key_func[key_value_tuple]:
    name = key_value_tuple[0]
    long_str_num, a_to_f, number = key_value_tuple[1]
    return [number, name]

d = {
    'John Adams': ['111223333', 'A', 91.0],
    'Willy Smith Jr.': ['222114444', 'C', 77.55],
    'Phil Jordan': ['777886666', 'F', 59.5]
}

for key, value in sorted[d.items[], key=key_func]:
    print[key, value]
6,
def key_func[key_value_tuple]:
    name = key_value_tuple[0]
    long_str_num, a_to_f, number = key_value_tuple[1]
    return [number, name]

d = {
    'John Adams': ['111223333', 'A', 91.0],
    'Willy Smith Jr.': ['222114444', 'C', 77.55],
    'Phil Jordan': ['777886666', 'F', 59.5]
}

for key, value in sorted[d.items[], key=key_func]:
    print[key, value]
7, v.v.

# sorted[l]
# TypeError: '

Bài Viết Liên Quan

Chủ Đề