我有一个默认值为字典的defaultdict。假设默认值类似于{'A': 0, 'B': 0, 'C':0}
每次,我输入一个新的键,它都会像这个{"Mary": {'A': 0, 'B': 0, 'C':0}}
,如果我把默认值加一,它应该像这个{"Mary": {'A': 1, 'B': 0, 'C':0}}
。
然而,这里有一个棘手的部分,如果我添加一个新的密钥,它将是这样的,{"Mary": {'A': 1, 'B': 0, 'C':0}, "Tom":{'A': 1, 'B': 0, 'C':0}}
,我想知道为什么?汤姆不应该是{'A': 0, 'B': 0, 'C':0}
吗?
有人能向我解释为什么会发生这种情况吗?我如何确保每次输入新密钥时,初始化实际上是原始初始化,而不是新增加的初始化?如果我用字典中已经存在的同一个键递增不同的字母,它会像往常一样递增吗?
顺便说一句,我在课堂上做这件事,你们可以按照下面的模板:
class Tokenization:
def __init__(self):
# Let's assume I created the defaultdict here in the __init__ function
def add_one_key(self, names, letter):
for name in names:
defaultdict[name][letter] += 1
您可以传递一个函数作为default_factory
参数:
from collections import defaultdict
dct = defaultdict(lambda: {'A': 0, 'B': 0, 'C':0})
dct["Mary"]['A'] = 1
print(dct["Mary"]) # {'A': 1, 'B': 0, 'C': 0}
print(dct["Tom"]) # {'A': 0, 'B': 0, 'C': 0}
实际上,当我们做类似defaultdict(int)
的事情时,我们实际上是在将函数int
传递给defaultdict
。然后每当需要默认值时,就会调用int()
(它总是返回0
)。