在别人的代码中,我阅读了以下两行:
x = defaultdict(lambda: 0)
y = defaultdict(lambda: defaultdict(lambda: 0))
由于 defaultdict 的参数是默认工厂,我认为第一行的意思是当我为不存在的键 k 调用 x[k] 时(例如像 v=x[k] 这样的语句),键值对(k ,0) 将被自动添加到字典中,就好像语句 x[k]=0 首先被执行一样。我对么?
你呢?似乎默认工厂会创建一个默认值为 0 的 defaultdict。但这具体意味着什么?我试图在 Python shell 中使用它,但无法弄清楚它到底是什么。
最佳答案
这是正确的。这是更惯用的写法
x = defaultdict(int)
在
y
的情况下,当您执行 y["ham"]["spam"]
时, key "ham"
插入到 y
中(如果它不存在)。与之关联的值变为 defaultdict
,其中 "spam"
自动插入值为 0
。即,
y
是一种“两层” defaultdict
。如果 "ham" not in y
,那么评估 y["ham"]["spam"]
就像做y["ham"] = {}
y["ham"]["spam"] = 0
就普通
dict
而言。关于Python defaultdict 和 lambda,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8419401/