更新defaultdi下的嵌套字典

2024-10-02 08:24:01 发布

您现在位置:Python中文网/ 问答频道 /正文

当试图在嵌套的collection.defaultdict下更新我的字典时,Python给了我一个错误

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "program.py", line 18, in train_ngrams
    if graphemes[i] not in mydict[phonemes[i]].keys():
AttributeError: 'str' object has no attribute 'keys'

我的代码:

^{pr2}$

好的是,当我迭代csv文件时,我正在尝试更新字典。这里我首先要检查它是否已经在defaultdict中。如果没有,那么我希望创建一个键和值对。在

defaultdict中的值将在以后实际用于实现一个嵌套的标准字典,它存储一些频率信息。在

下面是一个例子:

defaultdict(<class 'dict'>, {'T': {'t': 2}, 'UH': {'oo': 1}})

处理这个错误的简明方法是什么?注意,defaultdict在这一部分中是必需的。在

编辑:

train_ngrams("training-data-ex1.csv")

期望的输出应该是

defaultdict(<class 'dict'>, {'T': {'t': 2}, 'UH': {'oo': 1}})

编辑:

示例txt文件

phonemes,graphemes
T UH T,t oo t

Tags: 文件csvin字典错误linetrainkeys
1条回答
网友
1楼 · 发布于 2024-10-02 08:24:01

{如果你不想让一对元素^使用双循环。在

mydict = collections.defaultdict(lambda: collections.defaultdict(int))
with open("training-data-ex1.csv") as f:
    reader = csv.reader(f)
    next(reader) # skip header
    for phonemes, graphemes in reader:
        for p, g in zip(phonemes.split(), graphemes.split()):
            mydict[p][g] += 1

这使用了一个defaultdictdefaultdict,所以结果看起来有点奇怪,但它本质上正是您想要的:defaultdict(<function <lambda> at 0x7fd297740840>, {'T': defaultdict(<class 'int'>, {'t': 2}), 'UH': defaultdict(<class 'int'>, {'oo': 1})}),或者,没有所有的defaultdict样板文件,{'T': {'t': 2}, 'UH': {'oo': 1}}。在

相关问题 更多 >

    热门问题