Замена слова, которое соответствует ключу, не работает в Python - PullRequest
0 голосов
/ 16 мая 2019

Поэтому я пытаюсь заменить слово, соответствующее любому из ключей в словаре, его значениями.

Ниже приведен текущий код, который у меня есть, и мой код ничего не заменяет.

       for k, v in fdict.items():
           if word == k:
               word == v

Итак, в конце концов, я хочу, чтобы произошло следующее.

1 Ответ

1 голос
/ 16 мая 2019

Вы можете просто сделать

for word in (jsondata['value']['segments'][i]['transcriptionData']['content']).split():
    word = fdict.get(word, word)

Используя get, вы увидите, является ли word действительным ключом, если это так, вернуть соответствующее значение, в противном случае, вернуть второй аргумент какпо умолчанию, в этом случае word.Вам не нужно перебирать fdict, так как этот вид в первую очередь опровергает цель словаря.Тестирование на членство - это постоянный и быстрый процесс.

Если вы хотите, чтобы это было отражено в самом словаре, вам необходимо заново присвоить значение этому ключу:

# changing this to be more pythonic and readable
for segment in jsondata['value']['segments']:
    # assigning this to be a different variable for readability
    words = segment['transcriptionData']['content'].split()
    # join will make this a string again so we can re-assign it
    # to the key
    words = ' '.join(fdict.get(word, word) for word in words)

    # Now this will be reflected in your json
    segment['transcriptionData']['content'] = words

Кроме того, в вашем выражении if, word==v вернет False, так как == - это тест на равенство, а не присвоение значения, и это должно было быть word = v

Чтобы обратиться к обновлению в вопросе, вы никогда не пишете обновленное wordsв любом месте.Данные в вашей программе - , а не файл, поэтому любые изменения, внесенные в данные, не будут отражены в файле, пока вы не запишите данные обратно в файл.

# after you update words
# Note, this is a different file path, as w will truncate (wipe out) the 
# file if it exists, so use a different file path until you are sure your
# logic is sound
with open('somefile.json', 'w') as fh:
    json.dump(jsondata)
...