在别人的代码中,我阅读了以下两行:

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/

10-15 04:15