我想要一个具有以下属性的字典结构:
- 双重嵌套(所以,在这么多单词中是 3 维的)
- 记住每个级别添加到其中的事物的顺序
所以,如果我像这样向它添加项目:
# d = something dict-ish
d['a']['b']['c'] = 'd'
d['a'][1][2] = 3
d['f']['g']['e'] = 'g'
d['f'][5][6] = 7
d['a']['foo']['bar'] = 'hello world'
以下理解的结果:
[(i, j, k, d[i][j][k]) for i in d for j in d[i] for k in d[i][j]]
将会:
[('a', 'b', 'c', 'd'), ('a', 1, 2, 3), ('a', 'foo', 'bar', 'hello world'), ('f', 'g', 'e', 'g'), ('f', 5, 6, 7)]
我尝试使用 adefaultdict
来为新键强制执行此结构,因此我不必长时间键入它,如下所示:
# long way
d = OrderedDict()
d['a'] = OrderedDict([('b', OrderedDict([('c', 'd')]))])
d['a'][1] = OrderedDict([(2,3)])
# tried to use defaultdict
d = defaultdict(lambda: defaultdict(lambda: OrderedDict()))
d['a']['b']['c'] = 'd'
d['a'][1][2] = 3
但是defaultdict
不记得前两个级别的顺序。我不确定如何合并行为,因此显然前两个级别正在产生defaultdict
行为,因为我已声明d
如此。我怎样才能实现我想要的结构?