Пример :
я есть структура данных, которая по сути составляет вложенный словарь. Допустим, это выглядит так:
{'new jersey': {'mercer county': {'plumbers': 3,
'programmers': 81},
'middlesex county': {'programmers': 81,
'salesmen': 62}},
'new york': {'queens county': {'plumbers': 9,
'salesmen': 36}}}
Теперь поддерживать и создавать это довольно больно; каждый раз, когда у меня появляется новый штат / уезд / профессия, мне приходится создавать словари нижнего уровня с помощью неприятных блоков try / catch. Более того, мне нужно создавать раздражающие вложенные итераторы, если я хочу просмотреть все значения.
Я мог бы также использовать кортежи в качестве ключей, например:
{('new jersey', 'mercer county', 'plumbers'): 3,
('new jersey', 'mercer county', 'programmers'): 81,
('new jersey', 'middlesex county', 'programmers'): 81,
('new jersey', 'middlesex county', 'salesmen'): 62,
('new york', 'queens county', 'plumbers'): 9,
('new york', 'queens county', 'salesmen'): 36}
Это делает итерацию по значениям очень простой и естественной, но синтаксически более болезненно выполнять такие вещи, как агрегации и просмотр подмножеств словаря (например, если я просто хочу перейти от состояния к состоянию).
По сути, иногда я хочу думать о вложенном словаре как о плоском словаре, а иногда я хочу думать о нем действительно как о сложной иерархии. Я мог бы обернуть это все в классе, но кажется, что кто-то, возможно, уже сделал это. В качестве альтернативы может показаться, что для этого могут быть действительно элегантные синтаксические конструкции.
Как я мог сделать это лучше?
Приложение: я в курсеsetdefault()
но это на самом деле не делает для чистого синтаксиса. Кроме того, каждый под-словарь, который вы создаете, все еще должен иметьsetdefault()
устанавливается вручную.