В диктовке dicts, как вы эмулируете поведение Auto-vivification Perl?

Как Google, так и онлайн-документы не дают большого понимания моего запроса, поэтому я подумал, что я попрошу сообщество здесь.

В Perl вы можете легко настроить хеш-а-хеш-а-хэш и протестировать последний ключ следующим образом:

  • Python: Как обновить значение пары ключевых значений во вложенном словаре?
  • Как получить доступ к глубоко вложенному словарю с помощью кортежей?
  • Каков наилучший способ инициализации диктофона в Python?
  • my $hash = {}; $hash{"element1"}{"sub1"}{"subsub1"} = "value1"; if (exists($hash{"element1"}{"sub1"}{"subsub1"})) { print "found value\n"; } 

    Что такое «лучшая практика» в Python?

  • Следить за экземплярами в python
  • Найти все вхождения ключа в вложенных словарях и списках python
  • Как получить случайное значение в словаре python
  • Как использовать точку «.» Для доступа к членам словаря?
  • Является ли словарь Python примером хеш-таблицы?
  • Самый эффективный способ хранения 8M + sha256 хэшей
  • 4 Solutions collect form web for “В диктовке dicts, как вы эмулируете поведение Auto-vivification Perl?”

    Ближайший эквивалент, вероятно, примерно такой:

     import collections def hasher(): return collections.defaultdict(hasher) hash = hasher() hash['element1']['sub1']['subsub1'] = 'value1' if 'subsub1' in hash['element1']['sub1']: print 'found value' 

    Что касается того, является ли это наилучшей практикой в ​​Python, нужно обсудить:

     hash = {} hash['element1', 'sub1', 'subsub1'] = 'value' if ('element1', 'sub1', 'subsub1') in hash: print "found value" 

    Но это, безусловно, работает и очень элегантно, если оно работает для вас.

    Главный недостаток заключается в том, что у вас нет промежуточного доступа. Вы не можете :

     if ('element1', 'sub1') in hash: print "found value" 
     from collections import defaultdict tree = lambda: defaultdict(tree) t = tree() t[1][2][3] = 4 t[1][3][3] = 5 t[1][2]['test'] = 6 

    из Википедии Автовизуализация

    Я не знаю, соглашу ли я, но так я обычно декларирую словари словарей:

     someObj = { 'element1': { 'sub1': { 'subsub1': 'value1' } } } 

    Что касается проверки наличия элемента, я согласен с этим подходом:

     try: someObj['element1']['sub1']['subsub1'] except KeyError: print('no value found') else: print('found value') 
    Python - лучший язык программирования в мире.