2024-03-29 12:15:22 发布
网友
使用深度嵌套的python dict,我希望能够在这样的数据结构中分配值,如下所示:
mydict[key][subkey][subkey2]="value"
无需检查mydict[key]等是否实际设置为dict,例如使用
if not key in mydict: mydict[key]={}
创建子字典应该是动态的。什么是最优雅的方法来允许类似的东西-也许在标准的<type 'dict'>上使用decorator?
<type 'dict'>
class D(dict): def __missing__(self, key): self[key] = D() return self[key] d = D() d['a']['b']['c'] = 3
你可以使用一个元组作为dict的键,然后你完全不必担心子字典:
mydict[(key,subkey,subkey2)] = "value"
或者,如果出于某种原因您真的需要子目录,那么可以使用^{}。
对于两个级别,这很简单:
>>> from collections import defaultdict >>> d = defaultdict(dict) >>> d['key']['subkey'] = 'value' >>> d['key']['subkey'] 'value'
对三个人来说,情况稍微复杂一点:
>>> d = defaultdict(lambda: defaultdict(dict)) >>> d['key']['subkey']['subkey2'] = 'value' >>> d['key']['subkey']['subkey2'] 'value'
四个或更多的级别留给读者作为练习。:-)
我更喜欢戴夫的回答,但这里有个选择。
from collections import defaultdict d = defaultdict(lambda : defaultdict(int)) >>> d['a']['b'] += 1 >>> d defaultdict(<function <lambda> at 0x652f0>, {'a': defaultdict(<type 'int'>, {'b': 1})}) >>> d['a']['b'] 1
http://tumble.philadams.net/post/85269428/python-nested-defaultdicts
必须使用lambdas来实现内部默认的集合,这当然不太好,但显然是必要的。
你可以使用一个元组作为dict的键,然后你完全不必担心子字典:
或者,如果出于某种原因您真的需要子目录,那么可以使用^{} 。
对于两个级别,这很简单:
对三个人来说,情况稍微复杂一点:
四个或更多的级别留给读者作为练习。:-)
我更喜欢戴夫的回答,但这里有个选择。
http://tumble.philadams.net/post/85269428/python-nested-defaultdicts
必须使用lambdas来实现内部默认的集合,这当然不太好,但显然是必要的。
相关问题 更多 >
编程相关推荐