Есть ли способ загрузить JSON-код в рекурсивный defaultdict
, чтобы избежать KeyError
, используя Python 2.7?
Например:
from __future__ import print_function
from collections import defaultdict
import json
S = '{"a": [{"b": "TEST1", "p": "TEST2"}, {"b": "TEST3", "p": "TEST4"}]}'
d = json.loads(S)
nd = lambda: defaultdict(nd)
ni = nd()
print('1: ', ni['a'][0]['b'])
ni.update(d)
print('2: ', ni['a'][0]['b'])
print('3: ', ni['a'][1]['p'])
print('4: ', ni['a'][1]['c'])
Результат
1: defaultdict(<function <lambda> at 0x0266F530>, {})
2: TEST1
3: TEST4
Traceback (most recent call last):
File "C:/...", line 16, in <module>
print('4: ', ni['a'][1]['c'])
KeyError: 'c'
Похоже, что после ni.update(d)
ni
работает как dict
, а не как рекурсивный defaultdict
.Есть ли способ добавить dict
в рекурсив defaultdict
и сохранить его свойства?
Я ожидаю, что результат на шаге 4 похож на следующий:
4: defaultdict(<function <lambda> at 0x0266F530>, {})