这似乎是setdefault和defaultdict的一个非常直接的用法,我无法理解,如果有人能够解释下面的代码为什么会起作用,那将是非常棒的。Python 2.7中DefaultDict的行为
d = {}
for name in ['foo', 'bar', 'bars']:
t = d
for char in name:
t = t.setdefault(char,{}) # Should be a empty {}
print d
# Prints {'b': {'a': {'r': {'s': {}}}}, 'f': {'o': {'o': {}}}}
我无法理解这段代码如何工作。当行t = t.setdefault(char,{})执行时,它应该为t指定一个空字典,但是它如何影响d以便d最终成为嵌套字典?
另外,如果我使用defaultdict,那么上面的等价物会是什么。我想出了这个这是错误的:
d1 = defaultdict(dict)
for name in ['foo', 'bar', 'bars']:
t1 = d1
for char in name:
t1 = t1[char]
print d1
这将是巨大的,如果有人可以作为一个应该如何理解defaultdicts
与列表,'t'和'D'都指向相同的字典对象。当“t”改变时,“d”也改变。 –
好的,我现在就明白了。因此,当执行语句t = t.setdefault(char,{})时,部分** t.setdefault(char,{})**突变字典d,并且由于右侧评估为{},因此t是设置 {}。这种理解是否正确? –
@VikashRajaSamuelSelvin:你的理解是正确的。该程序的工作原理是一样的,如果它根本不使用't'变量,并且只是做了一个'_ = d.setdefault(char,{})',它就会更清晰。下划线变量会给出一个线索,那么这个任务刚刚被扔掉(这是)。 – Gerrat