遍历矩阵并创建字典

时间:2019-01-29 16:22:13

标签: python-3.x

通过使用以下脚本,我可以为每种矩阵类型获取连接类型的字典。我想在具有相似标题的新矩阵到来时更新值,如果标题不同,则在字典中添加该不同的标题。当第二个矩阵出现时,我无法获取值的更新:

对于以下矩阵:

   0.0   2.0  1.0  1.0
   2.0   0.0  1.0  1.0
   1.0   1.0  0.0  1.0
   1.0   1.0  1.0  0.0

以列表l作为矩阵标题

l = ['A', 'A', 'B', 'B']

它变成

      A    A     B     B
A   0.0   2.0  1.0  1.0
A   2.0   0.0  1.0  1.0
B   1.0   1.0  0.0  1.0
B   1.0   1.0  1.0  0.0

脚本

import collections
d = collections.defaultdict(dict)

for ix, iy in np.ndindex(matrix.shape):
        i = 1
        if int(matrix[ix][iy]) != 0:
            elem = l[ix]
            connection_index = matrix[ix][iy]
            connection_key = l[iy]
            if elm not in d[elm].keys(): 
                if connection_index ==1:
                    d[elm][connection_key +"_corner"] = i 
                elif connection_index ==2:
                     d[elm][connection_key +"_edge"] = i 
                elif connection_index >=3:
                     d[elm][connection_key +"_face"] = i
print(d)

给予:

defaultdict(dict,
            {'A': {'A_edge': 1, 'B_corner': 1},
             'B': {'A_corner': 1, 'B_corner': 1}})

现在,当第二个矩阵出现与以前相同时,它应该是

defaultdict(dict,
                {'A': {'A_edge': 2, 'B_corner': 2},
                 'B': {'A_corner': 2, 'B_corner': 2}})

但是我仍然得到

defaultdict(dict,
                {'A': {'A_edge': 1, 'B_corner': 1},
                 'B': {'A_corner': 1, 'B_corner': 1}})

我知道的一件事是因为我需要更新'i',并在循环外进行尝试,但是没有用。

在这里,我们说矩阵元素为2时为edge,当其为1时为corner。例如,(A,A)在第一行中有2,因此我们说

{'A': {'A_edge': 1}}

任何人都可以帮助获得此更新结果吗?

谢谢。

0 个答案:

没有答案