我想创建一个可以访问的字典:
d[id_1][id_2][id_3] = amount
Run Code Online (Sandbox Code Playgroud)
截至目前,我有一个巨大的丑陋功能:
def parse_dict(id1,id2,id3,principal, data_dict):
if data_dict.has_key(id1):
values = data_dict[id1]
if values.has_key[id2]
..
else:
inner_inner_dict = {}
# and so on
Run Code Online (Sandbox Code Playgroud)
什么是pythonic方法呢?
请注意,我输入了本金..但我想要的是金额..所以,如果所有三个键都在那里..添加本金到以前的金额!
谢谢
K Z*_*K Z 17
您可能需要考虑使用defaultdict:
例如:
json_dict = defaultdict(lambda: defaultdict(dict))
Run Code Online (Sandbox Code Playgroud)
将创建defaultdict的defaultdict第dictS(我know..but这是正确的),来访问它,你可以简单地做:
json_dict['context']['name']['id'] = '42'
Run Code Online (Sandbox Code Playgroud)
无需借助于if...else初始化.
from collections import defaultdict
d = defaultdict(lambda : defaultdict(dict))
d[id_1][id_2][id_3] = amount
Run Code Online (Sandbox Code Playgroud)
您可以制作一个简单的字典来创建新字典(使用Autovivification):
>>> class AutoDict(dict):
def __missing__(self, key):
x = AutoDict()
self[key] = x
return x
>>> d = AutoDict()
>>> d[1][2][3] = 4
>>> d
{1: {2: {3: 4}}}
Run Code Online (Sandbox Code Playgroud)
与 dict 的 defaultdict 一样,这将没有维度限制。
或者使用更简单的版本defaultdict(来自上面的维基链接):
def auto_dict():
return defaultdict(auto_dict)
Run Code Online (Sandbox Code Playgroud)
>>> from collections import defaultdict
>>> import json
>>> def tree(): return defaultdict(tree)
>>> t = tree()
>>> t['a']['b']['c'] = 'foo'
>>> t['a']['b']['d'] = 'bar'
>>> json.dumps(t)
'{"a": {"b": {"c": "foo", "d": "bar"}}}'
Run Code Online (Sandbox Code Playgroud)