Я попытался использовать difflib для сравнения слов и предложений (в данном случае что-то вроде словаря), и когда я пытаюсь сравнить вывод difflib с ключами в словаре, я получаю KeyError. Может ли кто-нибудь объяснить мне, почему это происходит? Когда я не использую difflib, все работает нормально.Почему после использования difflib в строке unicode я получаю KeyError
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import difflib
import operator
lst = ['król']
word = 'król'
dct = {}
for order in lst:
word_match_ratio = difflib.SequenceMatcher(None, word, order).ratio()
dct[order] = word_match_ratio
print order
print('%s %s' % (order, word_match_ratio))
sorted_matching_words = sorted(dct.items(), key=operator.itemgetter(1))
sorted_matching_words = str(sorted_matching_words.pop()[:1])
x = len(sorted_matching_words) - 3
word = sorted_matching_words[3:x]
print word
def translate(someword):
someword = trans_dct[someword]
print(someword)
return someword
trans_dct = {
"król": 'king'
}
print trans_dct
word = translate(word)
Ожидаемый результат: король
Вместо того, что я получаю:
Traceback (most recent call last):
File "D:/Python/Testing stuff.py", line 64, in <module>
word = translate(word)
File "D:/Python/Playground/Testing stuff.py", line 56, in translate
someword = trans_dct[someword]
KeyError: 'kr\\xf3l'
Я не понимаю, почему это происходит, похоже, difflib делает что-то странно, потому что, когда я делаю что-то вроде это:
uni = 'kr\xf3l'
print uni
def translate(word):
word = dct1[word]
print(word)
return word
dct1 = {
"król": 'king'
}
print dct1
word = translate('kr\xf3l')
print word
Все работает по назначению.
Возможно, вам нужно добавить 'u '...'' в начало строки unicode? @MarkTolonen 'assert repr ('kr \ xf3l') == 'kr \\ xf3l'' –
@ TadhgMcDonald-Jensen, нет, это был взломан OP, чтобы получить слово из' sorted_matching_words'. 'str()' было неправильным делом. –