我必须定义一个将字典键值移动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,我只知道如何将值更改为随机值,而不是准确地将其移动一个。
答案 0 :(得分:1)
如果您使用的是排序dict键的Python 3.7或更高版本,则可以将itertools.cycle
与dict值一起使用以允许值环绕,并使用itertools.islice
来将值移动给定的数字,以便可以用键将其压缩以使用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
来代替字典。