从字典打印矩阵

print matrix from dictionary

我想打印从 network-x 中的 Floyd-Marshall 算法得到的字典中的邻接矩阵。我该怎么做? 我想到这个是为了按原样查看字典:

X = nx.floyd_warshall(gra)
Y = {a: dict(b) for a, b in X.items()}
print(Y)

它returns这个:

{(0, 0): {(0, 0): 0, (1, 0): 1, (0, 1): 1, (1, 1): 2, (0, 2): 2, (1, 2): 3}, (1, 0): {(1, 0): 0, (0, 0): 1, (1, 1): 1, (0, 1): 2, (0, 2): 3, (1, 2): 2}, (0, 1): {(0, 1): 0, (0, 0): 1, (1, 1): 1, (0, 2): 1, (1, 0): 2, (1, 2): 2}, (1, 1): {(1, 1): 0, (1, 0): 1, (0, 1): 1, (1, 2): 1, (0, 0): 2, (0, 2): 2}, (0, 2): {(0, 2): 0, (0, 1): 1, (1, 2): 1, (0, 0): 2, (1, 0): 3, (1, 1): 2}, (1, 2): {(1, 2): 0, (1, 1): 1, (0, 2): 1, (0, 0): 3, (1, 0): 2, (0, 1): 2}}

是否可以先记一个变量,然后打印邻接矩阵?

示例输出:

       (0,0)  (0,1)   (1,0)  ...
(0,0)    0      1      2      1   ...
(0,1)    1      0      1 
...
(1, 2)   7      6     ...

谢谢

一个非常简单的想法是打印作为键的 header 行,然后对于每一对 key/mappings 使用 header 键打印值以确保获得好订单

keys = vals.keys()
print("       ", *keys)
for k, v in vals.items():
    print(k, ("{:^7}" * len(keys)).format(*(v[k] for k in keys)))

        (0, 0) (1, 0) (0, 1) (1, 1) (0, 2) (1, 2)
(0, 0)    0      1      1      2      2      3   
(1, 0)    1      0      2      1      3      2   
(0, 1)    1      2      0      1      1      2   
(1, 1)    2      1      1      0      2      1   
(0, 2)    2      3      1      2      0      1   
(1, 2)    3      2      2      1      1      0  

除了将其打印出来,您还可以将其转换为可操作的数据框。

import pandas as pd
a = {(0, 0): {(0, 0): 0, (1, 0): 1, (0, 1): 1, (1, 1): 2, (0, 2): 2, (1, 2): 3}, (1, 0): {(1, 0): 0, (0, 0): 1, (1, 1): 1, (0, 1): 2, (0, 2): 3, (1, 2): 2}, (0, 1): {(0, 1): 0, (0, 0): 1, (1, 1): 1, (0, 2): 1, (1, 0): 2, (1, 2): 2}, (1, 1): {(1, 1): 0, (1, 0): 1, (0, 1): 1, (1, 2): 1, (0, 0): 2, (0, 2): 2}, (0, 2): {(0, 2): 0, (0, 1): 1, (1, 2): 1, (0, 0): 2, (1, 0): 3, (1, 1): 2}, (1, 2): {(1, 2): 0, (1, 1): 1, (0, 2): 1, (0, 0): 3, (1, 0): 2, (0, 1): 2}}

df = pd.DataFrame(a)
print(df)

输出:

      0  1  0  1  0  1
      0  0  1  1  2  2

0 0   0  1  1  2  2  3
1 0   1  0  2  1  3  2
0 1   1  2  0  1  1  2
1 1   2  1  1  0  2  1
0 2   2  3  1  2  0  1
1 2   3  2  2  1  1  0