這似乎是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