值已移位的字典

时间:2019-04-03 15:40:46

标签: python dictionary ordereddictionary

我必须定义一个将字典键值移动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 个答案:

答案 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来代替字典。