Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 移动字典值并交换它们,但不能随机交换_Python_Dictionary_Key - Fatal编程技术网

Python 移动字典值并交换它们,但不能随机交换

Python 移动字典值并交换它们,但不能随机交换,python,dictionary,key,Python,Dictionary,Key,我开始使用的字典是: s={'A' : 'A', 'B' : 'B', 'C' : 'C'} 我想用的字典是: {'A' : 'B', 'B' : 'C', 'C' : 'A'}. 我只知道如何获得随机字母,而不是某个特定位置上的随机字母,但在这个问题中,我必须将key的值移位n=1 我试图定义值移位的n,但最终出现了一个错误 import string dictionary = dict.fromkeys(string.ascii_lowercase, 0) def shift(dic

我开始使用的字典是:

s={'A' : 'A', 'B' : 'B', 'C' : 'C'} 
我想用的字典是:

{'A' : 'B', 'B' : 'C', 'C' : 'A'}.
我只知道如何获得随机字母,而不是某个特定位置上的随机字母,但在这个问题中,我必须将key的值移位
n=1

我试图定义值移位的
n
,但最终出现了一个错误

import string
dictionary = dict.fromkeys(string.ascii_lowercase, 0)

def shift(dictionary,s)
    s2=' '
    for c in s:
          n=ord(c) - 65
          n=+=1
          n%=26
          s2+=chr(n+65)
    return s2

您应该使用OrderedDict以确保字典在迭代时保持其顺序

from collections import OrderedDict
input_dictionary = OrderedDict(A="A", B="B", C="C")
values = list(input_dictionary.values())
for index, key in enumerate(iter(input_dictionary.keys())):
    new_value_index = (index + 1) % len(values)
    input_dictionary[key] = values[new_value_index]
print(input_dictionary)
这就给了你有序的信息([('A','B'),('B','C'),('C','A'))


如果您使用的是python 3.6+,希望这对您有所帮助,然后尝试以下方法:

from collections import deque
s={'A' : 'A', 'B' : 'B', 'C' : 'C'}
rotated_values = deque(s.values())
rotated_values.rotate(-1)
new_s = {k:v for k,v in zip(s, rotated_values)}
输出

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

什么版本的python?字典是很有用的。您是否依赖于按字母顺序对键进行排序?3.7。我想把每个键移到下一个你怎么定义“下一个”。是按插入顺序吗?它是按字典顺序排列的吗?我强烈怀疑这是一个,而你实际上在寻找的是
dict(zip(string.ascii\u大写,string.ascii\u大写[1:+string.ascii\u大写[0])