为什么以下工作
x = defaultdict(dict)
for a,b,c in [('eg', 'ef', 'ee'), ('eg', 'eu', 'e4'), ('kk', 'nn', 'bb')]:
x[a][b] = c
以下引发错误?
x = defaultdict(dict)
for a,b,c,d in [('eg', 'ef', 'ee', 'gg'), ('eg', 'eu', 'e4', 'hh'),
('kk', 'nn', 'bb', 'ff')]:
x[a][b][c] = d
答案 0 :(得分:1)
这里的问题是defaultdict
接受一个callable,当一个键丢失时,它被用作工厂来生成值。一旦你理解了这一点,行为就很明确了:
x = defaultdict(dict)
x # it's a default dict
x['a'] # it's just a dict()
x['a']['b'] = 'c' # it's just setting the 'b' item in the dict x['a']
x['a']['b']['z'] # oops, error, because x['a']['b'] is not a dict!
如果您只需要有限级别的嵌套,那么使用带有dict
键的普通旧tuple
通常可以使用更简单的数据结构。这对于您的问题中显示的2-d和3-d示例都可以正常工作。
但是,如果您需要任意级别的嵌套,则可以考虑显示here的递归defaultdict
示例。