2016-08-30 5 views
-2

У меня есть следующая проблема: У меня есть defaultdict, называемый word_count, содержащий слова и номер, как часто они встречаются. Я получаю это, посчитав ответ API Google Speech. Тем не менее, этот API возвращает мне такие вещи, как «\ 303 \ 266» для немецкой буквы «ö». Теперь я хочу, чтобы пройти через этот Словаре, испытание, если одна из этих вещей, показанных выше, есть и заменить его с правильной вещи, как это:Переименовать defaultdict ключ в Python

Заполнение defaultdict:

word_count = defaultdict(int) 
for line in fileinput.input([file]): 
    line = line.strip() 
    words = line.split() 
    for word in words: 
     word_count[word] += 1 

До сих пор она работает отлично , Я могу напечатать dict, и он получает мне слова с номером.

Теперь замена ключа:

for key,val in word_count: 
    if '\\303\\266' in key: 
     new = key.replace('\\303\\266', 'ö') 
     word_count[new] = word_count.pop(key) 

Сейчас это не работает, я думаю, потому что я не могу поп (ключ), как он ожидает целое число. Как еще я это сделаю? Я попробовал несколько подходов, но, похоже, здесь ничего не работает.

Любая помощь была бы принята с благодарностью!

Решение:

Оказывается, это была моя вина, как я отсортировали Dict, и тем самым превратили его в список кортежей. Спасибо всем, кто помог мне понять это!

+0

Любое продвижение по * "не работает" *? – jonrsharpe

+1

'word_count.items()'? –

+0

Как работает 'for key, val в word_count:'? Какая ошибка вы получаете? – ozgur

ответ

1

Из обсуждений узнать, что вы лечите со списком кортежа вместо dict. Таким образом, list.pop всегда ожидает целое число, поэтому вы получаете ошибку.

TypeError: list indices must be integers, not str 

И dict ожидаем, что это ключ. Итак, здесь вы должны преобразовать входные данные, например dict, или всплывать из списка с использованием его индекса.

0

Вы можете сделать это так:

word_count['ö'] = word_count[key] 

, а затем:

del word_count[key] 
+0

Я получаю 'word_count ['ö'] = word_count [key] TypeError: индексы списка должны быть целыми числами , а не str' И не могу ли я заменить весь ключ на «ö» этим? Я просто хочу заменить эти неправильные цифры, а не весь ключ. –