Đối với câu hỏi cụ thể của bạn, bạn chỉ có thể sử dụng điều này:
>>> d={'fruit':
{'orange': 'orange', 'apple': 'red', 'banana': 'yellow'},
'vegetables':
{'lettuce': 'green', 'beet': 'red', 'pumpkin': 'orange'}}
>>> len[d]
2 # that is 1 reference for 'fruit' and 1 for 'vegetables'
>>> len[d['fruit']]
3 # 3 fruits listed...
>>> len[d['vegetables']]
3 # you thought of three of those...
>>> len[d['fruit']]+len[d['vegetables']]
6
Mặc dù bạn có thể sử dụng các công cụ khác nhau mà Python phải đếm các yếu tố trong từ điển tầm thường này, điều thú vị và hiệu quả hơn là nghĩ về cấu trúc của dữ liệu ở nơi đầu tiên.
Các cấu trúc dữ liệu cơ bản của Python là danh sách, bộ, bộ dữ liệu và từ điển. Bất kỳ cấu trúc dữ liệu nào trong số này có thể 'giữ', bằng cách tham chiếu, bất kỳ phiên bản lồng nhau nào của chính nó hoặc các cấu trúc dữ liệu khác.
Danh sách này là một danh sách lồng nhau:
>>> l = [1, [2, 3, [4]], [5, 6]]
>>> len[l]
3
>>> l[0]
1
>>> l[1]
[2, 3, [4]]
>>> l[2]
[5, 6]
Phần tử đầu tiên là số nguyên 1. Phần tử 1 và 2 là danh sách. Điều tương tự cũng có thể đúng với bất kỳ cấu trúc dữ liệu Python cơ bản nào khác. Đây là các cấu trúc dữ liệu đệ quy. Bạn có thể in chúng bằng pprint
Nếu bạn tổ chức từ điển của mình tốt hơn một chút, việc trích xuất thông tin từ nó với các công cụ đơn giản nhất của Python sẽ dễ dàng hơn:
>>> color='color'
>>> family='family'
>>> sensation='sensation'
>>> good_things={
'fruit':
{
'orange':
{
color: 'orange',
family: 'citrus',
sensation: 'juicy'
},
'apple':
{
color: ['red','green','yellow'],
family:'Rosaceae',
'sensation': 'woody'
},
'banana':
{
color: ['yellow', 'green'],
family: 'musa',
sensation: 'sweet'
}
},
'vegatables':
{
'beets':
{
color: ['red', 'yellow'],
family: 'Chenopodiaceae',
sensation: 'sweet'
},
'broccoli':
{
color: 'green',
family: 'kale',
sensation: 'The butter you put on it',
}
}
}
Bây giờ các truy vấn chống lại dữ liệu đó có ý nghĩa hơn:
>>> len[good_things]
2 # 2 groups: fruits and vegetables
>>> len[good_things['fruit']]
3 # three fruits cataloged
>>> len[good_things['vegetables']]
2 # I can only think of two vegetables...
>>> print good_things['fruit']['apple']
{'color': ['red', 'green', 'yellow'], 'sensation': 'woody', 'family': 'Rosaceae'}
>>> len[good_things['fruit']['apple']['color']]
3 # apples have 3 colors
Đôi khi bạn cần phải có số lượng khóa và giá trị trong từ điển. Bạn rõ ràng có thể làm điều này bằng cách sử dụng len[dict]
, nhưng nó sẽ chỉ trả về số lượng chính cho cấp độ từ điển đầu tiên.
Để đếm các khóa và giá trị trong từ điển lồng nhau, bạn có thể sử dụng chức năng này. Nó cũng hoạt động chính xác với các giá trị danh sách và tuple.
def count_k_v[d]:
keys = 0
values = 0
if type[d] == dict:
for item in d.keys[]:
if isinstance[d[item], [list, tuple, dict]]:
keys += 1
k, v = count_k_v[d[item]]
values += v
keys += k
else:
keys += 1
values += 1
elif type[d] == list or type[d] == tuple:
for item in d:
if isinstance[item, [list, tuple, dict]]:
k, v = count_k_v[item]
values += v
keys += k
else:
values += 1
return keys, values
Thí dụ
Hãy lấy từ điển mẫu này và chỉ định nó là đối số cho một hàm:
d = {
'quack':
{
'zozo': '10',
'pysha': 'queeee',
},
'bobique': ['iaiaia', '12312', 'auasuhrh2r'],
'put-in': 123,
'fofof':
{
'qwijhg': ['123', 13248, 'asd8ghg'],
'wijfr':
{
'quwhf': '128u4',
'hg': 2835,
},
},
'ghuh': [982, 'sygf'],
}
k, v = count_k_v[d]
print[f"Found {k} keys and {v} values"]
>>> Found 11 keys and 13 values