Я не уверен, что означают внутренние диктовки, все с ключами '1', '2' и т. Д. - они просто заменяют списки, представляющие возможные опечатки? Но тогда некоторые (но не все) также будут включать в себя «правильный» символ ... не опечатка ...?! Извините, но вы действительно запутываетесь в этой презентации - пример не сильно помогает (почему во второй позиции никогда не встречается буква "w", что, как я понимаю, странная опечатка структура данных ...? и т. д.)
Итак, ожидая пояснения, позвольте мне предположить, что все, что вам нужно, это представить для каждого входного символа все возможные односимвольные опечатки для него - списки были бы хорошими, но строки в этом случае более компактны и по существу эквивалентны:
possible_typos = {
'1': '2q',
'2': '1qw3',
'3': '2we4',
'4': '3er5',
'5': '4rt6',
}
Теперь, если вы заботитесь только о случаях, в которых есть только 1 неправильное написание:
def one_typo(word):
L = list(word)
for i, c in enumerate(L):
for x in possible_typos[c]:
L[i] = x
yield ''.join(L)
L[i] = c
так, например, for w in one_typo("12345"): print w
испускает:
22345
q2345
11345
1q345
1w345
13345
12245
12w45
12e45
12445
12335
123e5
123r5
12355
12344
1234r
1234t
12346
"Любое количество опечаток" приведет к огромному списку - 1014 * - это то, что вы хотите? Или "от 0 до 2 опечаток"? Или что еще конкретно ...?