Подсказка: здесь чего-то не хватает (может быть, вызов функции?)
for i in k:
w = words.items(), key=lambda x: x[0]
# ^ ^
print(s + w)
Но вы можете изменить его на:
def to_eng(s):
words = {"0":"zero","1":"one","2":"two","3":"three","4":"four","5":"five","6":"six","7":"seven","8":"eight","9":"nine"}
rx = re.compile(r'\d')
for m in rx.finditer(s):
s = s + " " + words[m.group(0)]
print(s)
Уступая
I want to buy 17 cars. one seven
Или - еще лучше - использовать список в целом:
def to_eng(s):
words = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"]
rx = re.compile(r'\d')
return s + " ".join(words[int(m.group(0))] for m in rx.finditer(s))
Что касается вашего последнего вопроса - вставка скобок с английскими словами - вам нужно составить функцию замены:
def to_eng(s):
words = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"]
rx = re.compile(r'\d+')
def repl(digits):
return digits.group(0) + " (" + " ".join(words[int(x)] for x in digits.group(0)) + ")"
return rx.sub(repl, s)
Это приводит к примеру строки:
I want to buy 17 (one seven) cars.