Словарь Python возвращает только 1 запись?

Я написал следующий код для печати словаря алфавита в верхнем/нижнем регистре, значения которого могут быть сдвинуты на целое число. Он продолжает возвращать только одну запись (например, {Z:z}), даже несмотря на то, что когда я использую оператор печати в цикле for, я вижу, что весь словарь печатается, как и ожидалось, независимо от того, какой сдвиг. Буду очень признателен за любые мысли о том, почему он вернет только одну запись?

def dictionary(self, shift):      
    '''
    For Caesar cipher. 

    shift (integer): the amount by which to shift every letter of the 
    alphabet. 0 <= shift < 26

    Returns: a dictionary mapping a letter (string) to 
             another letter (string). 
    '''

    #create empty dictionary
    alphaDict = {}

    #retrieve alphabet in upper and lower case
    letters = string.ascii_lowercase + string.ascii_uppercase

    #build dictionary with shift
    for i in range(len(letters)): 
        if letters[i].islower() == True:
            alphaDict = {letters[i]: letters[(i + shift) % 26]}
        else:
            alphaDict = {letters[i]: letters[((i + shift) % 26) + 26]}

    return alphaDict 

person NewGuy_IL    schedule 01.08.2016    source источник
comment
Вы продолжаете заменять свой диктофон новым диктофоном с одной записью.   -  person user2357112 supports Monica    schedule 01.08.2016


Ответы (2)


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

#build dictionary with shift
for i in range(len(letters)): 
    if letters[i].islower() == True:
        alphaDict[letters[i]] = letters[(i + shift) % 26]
    else:
        alphaDict[letters[i]] = letters[((i + shift) % 26) + 26]

return alphaDict 
person robot1208    schedule 01.08.2016

Вы создаете новый словарь в каждом цикле, а не добавляете его. Вы хотите создать новую пару key - value для словаря в каждом цикле.

    for i in letters: 
        if i.islower() == True:
            alphaDict[i] = letters[(letters.index(i) + shift) % 26]}
        else:
            alphaDict[i] = letters[((letters.index(i) + shift) % 26) + 26]}

return alphaDict
person user3636636    schedule 01.08.2016