我有一个很大的列表,比如:
[A][B1][C1]=1
[A][B1][C2]=2
[A][B2]=3
[D][E][F][G]=4我想构建一个多层次的字典,如下所示:
A
--B1
-----C1=1
-----C2=1
--B2=3
D
--E
----F
------G=4我知道如果我使用递归的defaultdict,我可以写
table[A][B1][C1]=1, table[A][B2]=2,
但是只有当我硬编码那些insert语句时,这才能起作用。
在解析列表时,我不知道需要预先调用多少个[]
table[key1][key2][...].
发布于 2012-01-02 23:18:34
你甚至不需要定义一个类就可以做到这一点:
from collections import defaultdict
nested_dict = lambda: defaultdict(nested_dict)
nest = nested_dict()
nest[0][1][2][3][4][5] = 6发布于 2011-03-21 00:37:14
您的示例说明,在任何级别上都可以有一个值,也可以有一个子元素字典。这就是所谓的树,并且有许多可用于它们的实现。这是其中之一:
from collections import defaultdict
class Tree(defaultdict):
def __init__(self, value=None):
super(Tree, self).__init__(Tree)
self.value = value
root = Tree()
root.value = 1
root['a']['b'].value = 3
print root.value
print root['a']['b'].value
print root['c']['d']['f'].value输出:
1
3
None您可以通过用JSON编写输入并使用 json.load 将其读作嵌套字典的结构。
发布于 2012-12-16 19:49:57
我认为递归字典最简单的实现是这样的。只有叶节点可以包含值。
# Define recursive dictionary
from collections import defaultdict
tree = lambda: defaultdict(tree)用法:
# Create instance
mydict = tree()
mydict['a'] = 1
mydict['b']['a'] = 2
mydict['c']
mydict['d']['a']['b'] = 0
# Print
import prettyprint
prettyprint.pp(mydict)输出:
{
"a": 1,
"b": {
"a": 1
},
"c": {},
"d": {
"a": {
"b": 0
}
}
}https://stackoverflow.com/questions/5369723
复制相似问题