Здравствуйте! У меня есть вложенный словарь следующего вида:
```python
dct = {
1: {
1: {
1: 111,
2: 112,
3: 113,
},
2: {
1: 121,
2: 122,
3: 123,
},
},
2: {
1: {
1: 211,
2: 212,
3: 213,
},
2: {
1: 221,
2: 222,
3: 223,
},
},
3: {
1: {
1: 311,
2: 312,
3: 313,
},
2: {
1: 321,
2: 322,
3: 323,
},
},
}
```
Я пытался решить задачу с использованием кода из другой задачи:
```python
result = 0
for n in dct:
for m in n.values():
for val in m:
result += val
print(result)
```
Однако он вызывает ошибку:
```
Traceback (most recent call last):
line 46, in
for m in n.values():
AttributeError: 'int' object has no attribute 'values'
```
Не могли бы вы подсказать, как правильно вычислить сумму элементов в данном словаре? Мне хотелось бы понять, как работать с такими структурами данных в будущем.
Для вычисления суммы всех элементов в вложенном словаре нужно использовать правильную стратегию обхода структуры данных. Ваш код вызывает ошибку, потому что вы пытаетесь вызвать `.values()` на переменной `n`, которая является целым числом, а не словарем.
Чтобы пройти по всем уровням вложенности, можно использовать рекурсивную функцию или простой цикл. Вот пример использования рекурсивной функции для этой задачи:
```python
def sum_nested_dict(dct):
total = 0
for key, value in dct.items():
if isinstance(value, dict): # Проверяем, является ли значение словарем
total += sum_nested_dict(value) # Рекурсивный вызов для вложенного словаря
else:
total += value # Если значение не словарь, добавляем его к общей сумме
return total
dct = {
1: {
1: {
1: 111,
2: 112,
3: 113,
},
2: {
1: 121,
2: 122,
3: 123,
},
},
2: {
1: {
1: 211,
2: 212,
3: 213,
},
2: {
1: 221,
2: 222,
3: 223,
},
},
3: {
1: {
1: 311,
2: 312,
3: 313,
},
2: {
1: 321,
2: 322,
3: 323,
},
},
}
result = sum_nested_dict(dct)
print(result)
```
Этот код создает рекурсивную функцию `sum_nested_dict`, которая проходит по всем элементам словаря. Если элемент является словарем, функция вызывает сама себя, передавая вложенный словарь. Если элемент не является словарем, он добавляет его значение к общей переменной `total`.
В результате, вызов `sum_nested_dict(dct)` вернет сумму всех чисел в вашем словаре.
Выдаёт ошибку:
Метод values() у чисел? Может не стоит?
Подскажите как посчитать сумму элементов в данном словаре
А если глубина словаря изменится, опять все вложенные for переписывать? С рекурсией лучше выглядит:
def best_function(d): sum = 0 for v in d.values(): if isinstance(v, dict): sum += best_function(v) else: sum += v return sum print(best_function(dct)) # 3906
Ну и как правильно подметил Влад Григорьев - почему отладкой кода не занимаетесь? А если задача будет сложнее, например в 100 раз, 100 вопросов зададите?