Hướng dẫn python defaultdict max value - giá trị tối đa mặc định của python

Trong

max[outer_dict.items[], key=lambda x: outer_dict.get[x, 0]]

Cuộc gọi

nested = {
    'a': {0: 106, 2: 35, 3: 12},
    'b': {0: 131, 1: 649, 2: 338, 3: 348, 4: 276, 5: 150, 6: 138, 7: 89, 
        8: 54, 9: 22, 10: 5, 11: 2},
    'c': {0: 39, 1: 13, 2: 30, 3: 15, 4: 5, 5: 10, 6: 1, 8: 1},
    'd': {0: 40, 1: 53, 2: 97, 3: 80, 4: 154, 5: 203, 6: 173, 7: 142, 
        8: 113, 9: 76, 10: 55, 11: 22, 12: 13, 13: 7},
}

for k, subdict in nested.items[]:
    print[k, max[[t for t in subdict.items[]], key=lambda t: t[1]]] 
5 trả về một trình lặp lại tạo ra các bộ dữ liệu [khóa, giá trị] của các mục trong
nested = {
    'a': {0: 106, 2: 35, 3: 12},
    'b': {0: 131, 1: 649, 2: 338, 3: 348, 4: 276, 5: 150, 6: 138, 7: 89, 
        8: 54, 9: 22, 10: 5, 11: 2},
    'c': {0: 39, 1: 13, 2: 30, 3: 15, 4: 5, 5: 10, 6: 1, 8: 1},
    'd': {0: 40, 1: 53, 2: 97, 3: 80, 4: 154, 5: 203, 6: 173, 7: 142, 
        8: 113, 9: 76, 10: 55, 11: 22, 12: 13, 13: 7},
}

for k, subdict in nested.items[]:
    print[k, max[[t for t in subdict.items[]], key=lambda t: t[1]]] 
6. Vì vậy, hàm
nested = {
    'a': {0: 106, 2: 35, 3: 12},
    'b': {0: 131, 1: 649, 2: 338, 3: 348, 4: 276, 5: 150, 6: 138, 7: 89, 
        8: 54, 9: 22, 10: 5, 11: 2},
    'c': {0: 39, 1: 13, 2: 30, 3: 15, 4: 5, 5: 10, 6: 1, 8: 1},
    'd': {0: 40, 1: 53, 2: 97, 3: 80, 4: 154, 5: 203, 6: 173, 7: 142, 
        8: 113, 9: 76, 10: 55, 11: 22, 12: 13, 13: 7},
}

for k, subdict in nested.items[]:
    print[k, max[[t for t in subdict.items[]], key=lambda t: t[1]]] 
7 được thông qua [khóa, giá trị] dưới dạng đối số
nested = {
    'a': {0: 106, 2: 35, 3: 12},
    'b': {0: 131, 1: 649, 2: 338, 3: 348, 4: 276, 5: 150, 6: 138, 7: 89, 
        8: 54, 9: 22, 10: 5, 11: 2},
    'c': {0: 39, 1: 13, 2: 30, 3: 15, 4: 5, 5: 10, 6: 1, 8: 1},
    'd': {0: 40, 1: 53, 2: 97, 3: 80, 4: 154, 5: 203, 6: 173, 7: 142, 
        8: 113, 9: 76, 10: 55, 11: 22, 12: 13, 13: 7},
}

for k, subdict in nested.items[]:
    print[k, max[[t for t in subdict.items[]], key=lambda t: t[1]]] 
8 của nó, và sau đó cố gắng tìm Tuple đó làm chìa khóa trong
nested = {
    'a': {0: 106, 2: 35, 3: 12},
    'b': {0: 131, 1: 649, 2: 338, 3: 348, 4: 276, 5: 150, 6: 138, 7: 89, 
        8: 54, 9: 22, 10: 5, 11: 2},
    'c': {0: 39, 1: 13, 2: 30, 3: 15, 4: 5, 5: 10, 6: 1, 8: 1},
    'd': {0: 40, 1: 53, 2: 97, 3: 80, 4: 154, 5: 203, 6: 173, 7: 142, 
        8: 113, 9: 76, 10: 55, 11: 22, 12: 13, 13: 7},
}

for k, subdict in nested.items[]:
    print[k, max[[t for t in subdict.items[]], key=lambda t: t[1]]] 
6, và tất nhiên điều đó sẽ không thành công, vì vậy cuộc gọi
a [0, 106]
b [1, 649]
c [0, 39]
d [5, 203]
0 luôn trả về 0.

Thay vào đó, chúng ta có thể sử dụng một chức năng chính trích xuất giá trị từ tuple. ví dụ:

nested = {
    'a': {0: 106, 2: 35, 3: 12},
    'b': {0: 131, 1: 649, 2: 338, 3: 348, 4: 276, 5: 150, 6: 138, 7: 89, 
        8: 54, 9: 22, 10: 5, 11: 2},
    'c': {0: 39, 1: 13, 2: 30, 3: 15, 4: 5, 5: 10, 6: 1, 8: 1},
    'd': {0: 40, 1: 53, 2: 97, 3: 80, 4: 154, 5: 203, 6: 173, 7: 142, 
        8: 113, 9: 76, 10: 55, 11: 22, 12: 13, 13: 7},
}

for k, subdict in nested.items[]:
    print[k, max[[t for t in subdict.items[]], key=lambda t: t[1]]] 

đầu ra

a [0, 106]
b [1, 649]
c [0, 39]
d [5, 203]

Một giải pháp thay thế hiệu quả hơn cho Lambda đó là sử dụng

a [0, 106]
b [1, 649]
c [0, 39]
d [5, 203]
1. Đây là một phiên bản đưa Maxima vào một từ điển:

from operator import itemgetter

nested = {
    'a': {0: 106, 2: 35, 3: 12},
    'b': {0: 131, 1: 649, 2: 338, 3: 348, 4: 276, 5: 150, 6: 138, 7: 89, 
        8: 54, 9: 22, 10: 5, 11: 2},
    'c': {0: 39, 1: 13, 2: 30, 3: 15, 4: 5, 5: 10, 6: 1, 8: 1},
    'd': {0: 40, 1: 53, 2: 97, 3: 80, 4: 154, 5: 203, 6: 173, 7: 142, 
        8: 113, 9: 76, 10: 55, 11: 22, 12: 13, 13: 7},
}

ig1 = itemgetter[1]
maxes = {k: max[[t for t in subdict.items[]], key=ig1] 
    for k, subdict in nested.items[]} 

print[maxes]

đầu ra

{'a': [0, 106], 'b': [1, 649], 'c': [0, 39], 'd': [5, 203]}

Một giải pháp thay thế hiệu quả hơn cho Lambda đó là sử dụng

a [0, 106]
b [1, 649]
c [0, 39]
d [5, 203]
1. Đây là một phiên bản đưa Maxima vào một từ điển:

Ví dụ 2

defaultdict[, {u'DE': 1, u'WV': 1, u'HI': 1, u'WY': 1, u'NH': 2, u'NJ': 1, u'NM': 1, u'TX': 1, u'LA': 1, u'NC': 1, u'NE': 1, u'TN': 1, u'RI': 1, u'VA': 1, u'CO': 1, u'AK': 1, u'AR': 1, u'IL': 1, u'GA': 1, u'IA': 1, u'MA': 1, u'ID': 1, u'ME': 1, u'OK': 2, u'MN': 1, u'MI': 1, u'KS': 1, u'MT': 1, u'MS': 1, u'SC': 2, u'KY': 1, u'OR': 1, u'SD': 1}]

Vì một danh sách đã được truyền dưới dạng default_factory, bất kỳ khóa không xác định [không tồn tại] nào sẽ trả về [] [tức là danh sách] theo mặc định.

Bây giờ khi danh sách các bộ dữ liệu được truyền trong vòng lặp, nó sẽ nối thêm giá trị trong d [color]

77 hữu ích 0 bình luận chia sẻ

I have a default dictionary with name df:

how do I get the keys of this dictionary whose values are more than 1.

"Từ điển tiêu chuẩn bao gồm phương thức setdefault [] để truy xuất giá trị và thiết lập mặc định nếu giá trị không tồn tại. Ngược lại, hãy

a [0, 106]
b [1, 649]
c [0, 39]
d [5, 203]
8để người gọi chỉ định mặc định [giá trị được trả về] ở phía trước khi container được khởi tạo."
a [0, 106]
b [1, 649]
c [0, 39]
d [5, 203]
8để người gọi chỉ định mặc định [giá trị được trả về] ở phía trước khi container được khởi tạo."

như được định nghĩa bởi Doug Hellmann trong Thư viện tiêu chuẩn Python theo ví dụDoug Hellmann trong Thư viện tiêu chuẩn Python theo ví dụ

Cách sử dụng defaultdict

Nhập defaultdict

>>> from collections import defaultdict

Khởi tạo defaultdict

Khởi tạo nó bằng cách vượt qua

có thể gọi là đối số đầu tiên của nó [bắt buộc] là đối số đầu tiên của nó [bắt buộc]

>>> d_int = defaultdict[int]
>>> d_list = defaultdict[list]
>>> def foo[]:
...     return 'default value'
... 
>>> d_foo = defaultdict[foo]
>>> d_int
defaultdict[, {}]
>>> d_list
defaultdict[, {}]
>>> d_foo
defaultdict[, {}]

** kwargs là đối số thứ hai của nó [tùy chọn] là đối số thứ hai của nó [tùy chọn]

>>> d_int = defaultdict[int, a=10, b=12, c=13]
>>> d_int
defaultdict[, {'a': 10, 'c': 13, 'b': 12}]

hoặc là

>>> kwargs = {'a':10,'b':12,'c':13}
>>> d_int = defaultdict[int, **kwargs]
>>> d_int
defaultdict[, {'a': 10, 'c': 13, 'b': 12}]

Nó làm việc như thế nào

Là một lớp con của từ điển chuẩn, nó có thể thực hiện tất cả các chức năng tương tự.

Nhưng trong trường hợp truyền một khóa không xác định, nó sẽ trả về giá trị mặc định thay vì lỗi. Ví dụ:Ví dụ:

nested = {
    'a': {0: 106, 2: 35, 3: 12},
    'b': {0: 131, 1: 649, 2: 338, 3: 348, 4: 276, 5: 150, 6: 138, 7: 89, 
        8: 54, 9: 22, 10: 5, 11: 2},
    'c': {0: 39, 1: 13, 2: 30, 3: 15, 4: 5, 5: 10, 6: 1, 8: 1},
    'd': {0: 40, 1: 53, 2: 97, 3: 80, 4: 154, 5: 203, 6: 173, 7: 142, 
        8: 113, 9: 76, 10: 55, 11: 22, 12: 13, 13: 7},
}

for k, subdict in nested.items[]:
    print[k, max[[t for t in subdict.items[]], key=lambda t: t[1]]] 
0

Trong trường hợp bạn muốn thay đổi giá trị mặc định, hãy ghi đè default_factory:

nested = {
    'a': {0: 106, 2: 35, 3: 12},
    'b': {0: 131, 1: 649, 2: 338, 3: 348, 4: 276, 5: 150, 6: 138, 7: 89, 
        8: 54, 9: 22, 10: 5, 11: 2},
    'c': {0: 39, 1: 13, 2: 30, 3: 15, 4: 5, 5: 10, 6: 1, 8: 1},
    'd': {0: 40, 1: 53, 2: 97, 3: 80, 4: 154, 5: 203, 6: 173, 7: 142, 
        8: 113, 9: 76, 10: 55, 11: 22, 12: 13, 13: 7},
}

for k, subdict in nested.items[]:
    print[k, max[[t for t in subdict.items[]], key=lambda t: t[1]]] 
1

hoặc là

nested = {
    'a': {0: 106, 2: 35, 3: 12},
    'b': {0: 131, 1: 649, 2: 338, 3: 348, 4: 276, 5: 150, 6: 138, 7: 89, 
        8: 54, 9: 22, 10: 5, 11: 2},
    'c': {0: 39, 1: 13, 2: 30, 3: 15, 4: 5, 5: 10, 6: 1, 8: 1},
    'd': {0: 40, 1: 53, 2: 97, 3: 80, 4: 154, 5: 203, 6: 173, 7: 142, 
        8: 113, 9: 76, 10: 55, 11: 22, 12: 13, 13: 7},
}

for k, subdict in nested.items[]:
    print[k, max[[t for t in subdict.items[]], key=lambda t: t[1]]] 
2

Nó làm việc như thế nào

Là một lớp con của từ điển chuẩn, nó có thể thực hiện tất cả các chức năng tương tự.

Nhưng trong trường hợp truyền một khóa không xác định, nó sẽ trả về giá trị mặc định thay vì lỗi. Ví dụ:

Trong trường hợp bạn muốn thay đổi giá trị mặc định, hãy ghi đè default_factory:

nested = {
    'a': {0: 106, 2: 35, 3: 12},
    'b': {0: 131, 1: 649, 2: 338, 3: 348, 4: 276, 5: 150, 6: 138, 7: 89, 
        8: 54, 9: 22, 10: 5, 11: 2},
    'c': {0: 39, 1: 13, 2: 30, 3: 15, 4: 5, 5: 10, 6: 1, 8: 1},
    'd': {0: 40, 1: 53, 2: 97, 3: 80, 4: 154, 5: 203, 6: 173, 7: 142, 
        8: 113, 9: 76, 10: 55, 11: 22, 12: 13, 13: 7},
}

for k, subdict in nested.items[]:
    print[k, max[[t for t in subdict.items[]], key=lambda t: t[1]]] 
3

Ví dụ trong câu hỏi

ví dụ 1

Vì int đã được truyền dưới dạng default_factory, bất kỳ khóa không xác định nào sẽ trả về 0 theo mặc định.

nested = {
    'a': {0: 106, 2: 35, 3: 12},
    'b': {0: 131, 1: 649, 2: 338, 3: 348, 4: 276, 5: 150, 6: 138, 7: 89, 
        8: 54, 9: 22, 10: 5, 11: 2},
    'c': {0: 39, 1: 13, 2: 30, 3: 15, 4: 5, 5: 10, 6: 1, 8: 1},
    'd': {0: 40, 1: 53, 2: 97, 3: 80, 4: 154, 5: 203, 6: 173, 7: 142, 
        8: 113, 9: 76, 10: 55, 11: 22, 12: 13, 13: 7},
}

for k, subdict in nested.items[]:
    print[k, max[[t for t in subdict.items[]], key=lambda t: t[1]]] 
4

Bây giờ khi chuỗi được truyền trong vòng lặp, nó sẽ tăng số lượng các bảng chữ cái đó trong d. 0 bình luận chia sẻ

Bài Viết Liên Quan

Chủ Đề