Chr*_*Cox 7 python dictionary nested
我有一张表格:
A1, B1, C1, (value)
A1, B1, C1, (value)
A1, B1, C2, (value)
A1, B2, C1, (value)
A1, B2, C1, (value)
A1, B2, C2, (value)
A1, B2, C2, (value)
A2, B1, C1, (value)
A2, B1, C1, (value)
A2, B1, C2, (value)
A2, B1, C2, (value)
A2, B2, C1, (value)
A2, B2, C1, (value)
A2, B2, C2, (value)
A2, B2, C2, (value)
Run Code Online (Sandbox Code Playgroud)
我想在python中使用它作为字典,形式:
H = {
'A1':{
'B1':{
'C1':[],'C2':[],'C3':[] },
'B2':{
'C1':[],'C2':[],'C3':[] },
'B3':{
'C1':[],'C2':[],'C3':[] }
},
'A2':{
'B1':{
'C1':[],'C2':[],'C3':[] },
'B2':{
'C1':[],'C2':[],'C3':[] },
'B3':{
'C1':[],'C2':[],'C3':[] }
}
}
Run Code Online (Sandbox Code Playgroud)
这样就H[A][B][C]产生了一个特定的唯一值列表.对于小字典,我可能只是如上所述预先定义结构,但我正在寻找一种有效的方法来迭代表并构建字典,而不提前指定字典键.
Ste*_*yne 10
input = [('A1', 'B1', 'C1', 'Value'), (...)]
from collections import defaultdict
tree = defaultdict(lambda: defaultdict(lambda: defaultdict(list)))
#Alternatively you could use partial() rather than lambda:
#tree = defaultdict(partial(defaultdict, partial(defaultdict, list)))
for x, y, z, value in input:
tree[x][y][z].append(value)
Run Code Online (Sandbox Code Playgroud)
如果您只访问 H[A][B][C] (也就是说,永远不会单独访问 H[A] 或 H[A][B]),我建议使用 IMO 更清洁的解决方案:使用元组作为 defaultdict 索引:
from collections import defaultdict
h = defaultdict(list)
for a, b, c, value in input:
h[a, b, c].append(value)
Run Code Online (Sandbox Code Playgroud)