она перезаписывает переменную, потому что вы переопределяете ее в своем цикле как пустой словарь, а затем помещаете в нее только одно значение. Переместите эти 2 строки за пределы цикла, и это исправлено. Также вам не нужно использовать эти локальные переменные, просто используйте перечисление.
def getLetters(word):
global letters
letters = {}
for i, letter in enumerate(word, 1):
letters[i] = letter
print(letters)
Это печатает:
{1: 'W', 2: 'h', 3: 'i', 4: 't', 5: 'c', 6: 'o', 7: 'm', 8: 'b'}
Примечание Я не совсем оправдываюэто потому, что это очень нетрадиционно делать это. Почему бы просто не вернуть словарь и при его вызове присвоить результат переменной, то теперь это глобальное значение в этом контексте. Также простое понимание диктовок будет делать именно то, что вы пытаетесь сделать:
def getLetters(word):
return {i:l for i, l in enumerate(word, 1)}
letters = getLetters(keyword)
Edit или, как умно упомянуто @furas, просто используйте:
return dict(enumerate(word, 1))
Все это говорит, что я не верю, что вам даже действительно нужна эта функция. Чтобы получить вторую букву в этом диктовке, вы использовали бы letters[2]
, тогда как если бы оно было просто оставлено как строковое значение, его можно было бы обработать аналогично списку, так что keyword[1]
было бы таким же результатом, или просто используйте keyword[i+1]
, еслипервый индекс должен начинаться с 1.