Как я могу заставить Python автоматически создавать недостающие пары ключ/значение в словаре?

Я создаю структуру словаря, которая имеет несколько уровней. Я пытаюсь сделать что-то вроде следующего:

dict = {}
dict['a']['b'] = True

В настоящий момент выше не выполняется, потому что ключ 'a' не существует. На данный момент мне нужно проверить на каждом уровне вложенности и вручную вставить пустой словарь. Есть ли какой-то тип синтаксического сахара, который может сделать что-то вроде выше, может произвести:

{'a': {'b': True}}

Не нужно создавать пустой словарь на каждом уровне вложенности?

Ответ 1

Как говорили другие, используйте defaultdict. Это идиома, которую я предпочитаю для произвольно-глубокого вложения словарей:

nested_dict = lambda: collections.defaultdict(nested_dict)

d = nested_dict()
d[1][2][3] = 'Hello, dictionary!'
print(d[1][2][3]) # Prints Hello, dictionary!

Это также позволяет проверить, существует ли элемент еще немного, поскольку вам больше не нужно использовать get:

if not d[2][3][4][5]:
    print('That element is empty!')

Ответ 4

Если глубина вашей структуры данных исправлена ​​(то есть вы заранее знаете, что вам нужно mydict[a][b][c], но не mydict[a][b][c][d]), вы можете создать вложенную структуру defaultdict с использованием выражений lambda для создания внутренних структур

two_level = defaultdict(dict)
three_level = defaultdict(lambda: defaultdict(dict))
four_level = defaultdict(lamda: defaultdict(lambda: defaultdict(dict)))