1 回答

TA貢獻2037條經(jīng)驗 獲得超6個贊
您可以通過遞歸找到所有字典。在此之前,我必須澄清以下幾點:
在字典中查找而
d
不是在字典中查找b
,對嗎?如果要查找所有字典,
dict
示例中有 6 個。如果你想找到所有key-value pairs
,它有 9key-value pairs
。
所以我有正確的兩個版本,一個用于dict
,一個用于key-value
(僅一行差異):
def count_dict(d):
if isinstance(d, dict):
# count 1 if it is a dict
count = 1
# iterate values for dict
iterable = d.values()
else:
count = 0
iterable = d
for v in iterable:
if isinstance(v, dict) or isinstance(v, list) or isinstance(v, tuple) or isinstance(v, set):
# count recursively
count += count_dict(v)
return count
def count_dict_pairs(d):
if isinstance(d, dict):
# count key-value pairs if it is a dict
count = len(d)
iterable = d.values()
else:
count = 0
iterable = d
for v in iterable:
if isinstance(v, dict) or isinstance(v, list) or isinstance(v, tuple) or isinstance(v, set):
count += count_dict(v)
return count
def test():
d = {
'a1': {
'a2': [
[1, 2, 3],
{
'a3': ({
'a4': 'cv'
}, (1, 2, 3, {
'a5': 'c'
}))
}
]
},
'b1': {
'b2': [1, 2, 3]
},
3: '3',
(1, 2, 3): 'immutable'
}
print(count_dict(d)) # output 6
print(count_dict_pairs(d)) # output 9
希望對你有幫助。
添加回答
舉報