字典中的打印矩阵

问题描述 投票:0回答:2

我想从我从network-x的Floyd-Marshall算法获得的字典中打印邻接矩阵。我该怎么做?我想出了这本来看看字典:

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

它返回此:

{(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     ...

谢谢

python dictionary networkx adjacency-matrix
2个回答
1
投票

一个非常简单的想法是打印作为键的标题行,然后使用标题键为每对键/映射打印值,以确保顺序良好

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  

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
© www.soinside.com 2019 - 2024. All rights reserved.