В dict dicts, как Вы эмулируете auto-vivification поведение Perl? [дубликат]

13
задан martineau 7 December 2016 в 02:07
поделиться

3 ответа

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

import collections

def hasher():
  return collections.defaultdict(hasher)

hash = hasher()
hash['element1']['sub1']['subsub1'] = 'value1'
if 'subsub1' in hash['element1']['sub1']:
  print 'found value'
16
ответ дан 1 December 2019 в 22:06
поделиться

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

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

Но это определенно работает и очень элегантно, если это подходит вам.

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

if ('element1', 'sub1') in hash:
   print "found value"
5
ответ дан 1 December 2019 в 22:06
поделиться

Не знаю, получу ли я согласие, но вот как я обычно объявляю словари словарей:

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

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

try:
  someObj['element1']['sub1']['subsub1']
except KeyError:
  print('no value found')
else:
  print('found value')
0
ответ дан 1 December 2019 в 22:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: