Если вы используете 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.