Словарь, который сдвинул значения - PullRequest
0 голосов
/ 03 апреля 2019

Мне нужно определить функцию, которая сдвигает значения словарного ключа на n = 1.

Например:

input :  {'A' : 'A', 'B' : 'B', 'C' : 'C'} 

output : {'A' : 'B', 'B' : 'C', 'C' : 'A'}

Это то, что я пробовал:

dictionary = {'A' : 'A', 'B' : 'B', 'C' : 'C'}

def shift(dictionary, n):
    n=1
    for i in range (0,int(len(dictionary)/2)):    
        dictionary[list(dictionary)[i]], dictionary[list(dictionary)[len(dictionary)-i-1]] = dictionary[list(dictionary)[len(dictionary)-i-1]], dictionary[list(dictionary)[i]]

    return shift

Может кто-нибудь объяснить мне, что нужно сдвинуть на n = 1, я знаю только, как изменить значение, чтобы оно было случайным, а не точно перемещенным одним.

1 Ответ

1 голос
/ 03 апреля 2019

Если вы используете Python 3.7 или более позднюю версию, в которой упорядочены ключи dict, вы можете использовать itertools.cycle со значениями dict, чтобы разрешить перенос значений, и использовать itertools.islice для сдвига значений на заданное число, чтобы их можно было сжать с помощью ключей, чтобы создать новый dict с конструктором dict:

from itertools import cycle, islice
def shift(d, n):
    return dict(zip(d, islice(cycle(d.values()), n, None)))

так что shift({'A' : 'A', 'B' : 'B', 'C' : 'C'}, 1) возвращает:

{'A': 'B', 'B': 'C', 'C': 'A'}

и shift({'A' : 'A', 'B' : 'B', 'C' : 'C'}, 2) возвращает:

{'A': 'C', 'B': 'A', 'C': 'B'}

Если вы используете более ранние версии Python, вы можете использовать collections.OrderedDict вместо dict.

...