При попытке обновить мой словарь под вложенным 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'
Мой код:
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
необходим в этой части.
РЕДАКТИРОВАТЬ:
train_ngrams("training-data-ex1.csv")
Желаемый результат должен быть
defaultdict(<class 'dict'>, {'T': {'t': 2}, 'UH': {'oo': 1}})
РЕДАКТИРОВАТЬ:
Образец текстового файла
phonemes,graphemes
T UH T,t oo t
mydict[phonemes[i]]
возвращает значение ключа - person styvane   schedule 02.05.2016mydict.update({phonemes[i] : graphemes[i]}); if graphemes[i] not in mydict[phonemes[i]].keys():
вы в основном проверяетеif graphemes[i] not in graphemes[i].keys():
, что не имеет особого смысла. - person tobias_k   schedule 02.05.2016oo
не добавляется кT
? Должны ли они быть в паре? Всегда ли фонем столько же, сколько и графем? - person tobias_k   schedule 02.05.2016