是否有办法使defaultdict也成为defaultdict的缺省值?(即无限级递归默认值?)
我想做的是:
x = defaultdict(...stuff...)
x[0][1][0]
{}所以,我可以做x = defaultdict(defaultdict),但这只是第二个层次:
x[0]
{}
x[0][0]
KeyError: 0有一些食谱可以做到这一点。但是,仅仅使用正常的defaultdict参数就可以做到这一点吗?
注意,这是在询问如何执行无限级递归defaultdict,因此它不同于https://stackoverflow.com/questions/5029934,后者是如何执行两级默认的。
我可能最终会使用这个模式,但是当我意识到我不知道该怎么做的时候,它让我很感兴趣。
发布于 2013-10-04 19:33:55
对于任意数量的级别:
def rec_dd():
return defaultdict(rec_dd)
>>> x = rec_dd()
>>> x['a']['b']['c']['d']
defaultdict(<function rec_dd at 0x7f0dcef81500>, {})
>>> print json.dumps(x)
{"a": {"b": {"c": {"d": {}}}}}当然,您也可以使用lambda来完成这个任务,但我发现lambda的可读性较低。无论如何,它看起来都是这样的:
rec_dd = lambda: defaultdict(rec_dd)发布于 2015-01-07 01:11:08
这里的其他答案告诉您如何创建包含“无限多”defaultdict的defaultdict,但是它们没有解决我认为可能是您最初需要的东西,即简单地有一个两深度的默认设置。
你可能一直在寻找:
defaultdict(lambda: defaultdict(dict))您可能更喜欢这种结构的原因是:
defaultdict的“叶子”不是字典,例如:defaultdict(lambda: defaultdict(list))或defaultdict(lambda: defaultdict(set))。发布于 2013-10-04 19:34:18
这样做有一个巧妙的诀窍:
tree = lambda: defaultdict(tree)然后,您可以使用x创建x = tree()。
https://stackoverflow.com/questions/19189274
复制相似问题