Python defaultdict and lambda

后端 未结 5 603
野的像风
野的像风 2020-12-02 05:31

In someone else\'s code I read the following two lines:

x = defaultdict(lambda: 0)
y = defaultdict(lambda: defaultdict(lambda: 0))

As the a

5条回答
  •  -上瘾入骨i
    2020-12-02 06:20

    I think the first line means that when I call x[k] for a nonexistent key k (such as a statement like v=x[k]), the key-value pair (k,0) will be automatically added to the dictionary, as if the statement x[k]=0 is first executed.

    That's right. This is more idiomatically written

    x = defaultdict(int)
    

    In the case of y, when you do y["ham"]["spam"], the key "ham" is inserted in y if it does not exist. The value associated with it becomes a defaultdict in which "spam" is automatically inserted with a value of 0.

    I.e., y is a kind of "two-tiered" defaultdict. If "ham" not in y, then evaluating y["ham"]["spam"] is like doing

    y["ham"] = {}
    y["ham"]["spam"] = 0
    

    in terms of ordinary dict.

提交回复
热议问题