При попытке обновить мой словарь под вложенной collection.defaultdict
Python дал мне ошибкуОбновление вложенного словаря под defaultdict
Сказать
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'
Мой код:
import csv
from collections import defaultdict
def train_ngrams(train_file):
mydict = defaultdict(dict)
phonemes = []
graphemes = []
with open(train_file, 'r') as f:
reader = csv.reader(f)
next(reader)
for p, g in reader:
phonemes += p.split()
graphemes += g.split()
for i in range(len(phonemes)):
if phonemes[i] not in mydict.keys():
mydict.update({phonemes[i] : graphemes[i]})
if graphemes[i] not in mydict[phonemes[i]].keys():
mydict[phonemes[i]].update({phonemes[i] : (graphemes.count(graphemes[i]) for graphemes[i] in graphemes) - 1})
else:
mydict[phonemes[i]][graphemes[i]] += 1
Ну вещь я Я пытаюсь обновить словарь, когда я перебираю файл csv. И здесь я сначала хочу проверить, находится ли он в defaultdict
. Если нет, то я хочу создать пару ключей и значений.
И значение здесь, в defaultdict
, фактически будет использовано позже для реализации вложенного нормального словаря, в котором хранятся некоторые данные о частоте.
Вот пример:
defaultdict(<class 'dict'>, {'T': {'t': 2}, 'UH': {'oo': 1}})
Что такое краткий способ справиться с этой ошибкой? Обратите внимание, что в этой части требуется defaultdict
.
EDIT:
train_ngrams("training-data-ex1.csv")
Нужный выход должен быть
defaultdict(<class 'dict'>, {'T': {'t': 2}, 'UH': {'oo': 1}})
EDIT:
Образец TXT файл
phonemes,graphemes
T UH T,t oo t
'mydict [phonemes [i]]' возвращает значение ключа – styvane
Что вы пытаетесь сделать? С строками 'mydict.update ({фонемы [i]: graphemes [i]}); если graphemes [i] не в mydict [phonemes [i]]. keys(): 'вы в основном проверяете', если graphemes [i] не в graphemes [i] .keys(): ', который, похоже, не делает много смысла. –
@tobias_k Я хочу проверить, существует ли эта пара ключей и значений в defaultdict, если нет, тогда мне придется обновить ее с этим значением и парой, чтобы я мог фактически манипулировать ею и получить правильный результат, который я хотел. Добавлен –