Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.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 - Fatal编程技术网

Python 对字典中的值执行循环移位

Python 对字典中的值执行循环移位,python,dictionary,Python,Dictionary,我必须建立一个像这样的大字典 {'A' : {'A' : 1, 'B' : 0, 'C' : 0}, 'B' : {'A' : 0, 'B' : 1, 'C' : 0}} ............................ 每个内部字典移动一个位置。有没有办法让这个过程自动化 我可以循环使用np.roll()函数,如果它是ndarray,那么我想知道我是否可以用字典做类似的事情 这将在r中创建字符串: import string r = {} a = [1] + [0] * 25 f

我必须建立一个像这样的大字典

{'A' : {'A' : 1, 'B' : 0, 'C' : 0}, 
'B' : {'A' : 0, 'B' : 1, 'C' : 0}} 
............................
每个内部字典移动一个位置。有没有办法让这个过程自动化


我可以循环使用
np.roll()
函数,如果它是
ndarray
,那么我想知道我是否可以用字典做类似的事情

这将在
r
中创建字符串:

import string
r = {}
a = [1] + [0] * 25
for i in string.ascii_uppercase:
     r[i] = dict(zip(string.ascii_uppercase,a))
     a = a[-1:] + a[:-1]
print r
奖金一行 如果您使用的是Python 2.7+或Python 3,则可以使用字典理解获得一行代码:

import string
{i:{j:1 if i==j else 0 for j in string.ascii_uppercase} for i in string.ascii_uppercase}
还有另一个解决方案

解决方案1:

out = dict()
syms = ['A', 'B', 'C']

for sym_outer in syms:
    inner_dict = dict()
    for sym_inner in syms:
        inner_dict[sym_inner] = 0 if sym_inner != sym_outer else 1
    out[sym_outer] = inner_dict
解决方案2:

这是一个部分解决方案,但是你得到['a']['a']==1,得到['a']['B']==0

from collections import defaultdict

out = defaultdict(lambda: defaultdict(int))

for sym in ['A', 'B', 'C']:
    out[sym][sym] = 1
您可以使用快速字典值(列表)移位(deque
rotate
function),但字典没有特定的功能,您应该自己制作,例如:

# shift dct (dict) values by n to right if n is positive
# and to left if n is negative; returns new dictionary
def dict_roll(dct, n):
    shift_values = deque(dct.values())
    shift_values.rotate(n)
    return dict(zip(dct.keys(), shift_values))
演示:


可能使用deque而不是python,字典被实现为哈希表,并且是无序的。所以,你的“立场”毫无意义。你是说收集。订购的信息吗?@utdemir在这里不是毫无意义的。他是根据键旋转值的。那么,我们假设键是按自然字母顺序排列的吗?不,我只是编了一个例子来说明我的问题。键是字符串
>>> d = {'A': {'A': 1, 'C': 0, 'B': 0}, 'B': {'A': 0, 'C': 0, 'B': 1}}
>>> for k in d:
...     d[k] = dict_roll(d[k], 1)
... 
>>> d
{'A': {'A': 0, 'C': 1, 'B': 0}, 'B': {'A': 1, 'C': 0, 'B': 0}}
>>> for k in d:
...     d[k] = dict_roll(d[k], 1)
... 
>>> d
{'A': {'A': 0, 'C': 0, 'B': 1}, 'B': {'A': 0, 'C': 1, 'B': 0}}