#python #python-3.x #dictionary
#python #python-3.x #словарь
Вопрос:
Я довольно новичок в Python, и у меня проблемы с вложенными словарями. Рассмотрим этот словарь словарей:
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'
}
Как подсчитать вложенный диктант из словаря d
.
И мой алгоритм для этого неверен:
def count_dict(d):
# print(d.items())
return sum(1 count_dict(v) if isinstance(v, dict) else 1 for _, v in d.items())
$> print(count_dict(d))
$> 6
и ожидаемый результат равен 9.
Комментарии:
1. Я слепой или в этом dict нет «b»?
2. В
d
(d
включено) всего 6 dicts, если я правильно их посчитаю3. да, я думаю, возможно, он имеет в виду, сколько пар ключ-значение, это 9 для пар ключ-значение. @pLOPeGG
Ответ №1:
Вы можете найти все dict с помощью рекурсии. Перед этим я должен кое-что уточнить:
- поиск в словаре
d
не в словареb
, верно? - если вы хотите найти весь словарь, в примерах его 6
dict
. если вы хотите найти все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
Надеюсь, это поможет вам.
Комментарии:
1. Большое вам спасибо, я имел в виду пары ключ-значение, и я перепутал концепцию словаря python.