如何从字典中创建一个漂亮的矩阵

ann*_*nne 9 python dictionary matrix

我想制作一个矩阵,列出嵌套的词典.但是我无法找到如何制作矩阵,更不用说如何将我的价值放入其中.

我的字典看起来像:

    {'1': {'3': 0, '2': 1, '5': 1, '4': 0, '6': 29},
    '3': {'1': 0, '2': 0, '5': 0, '4': 1, '6': 1},
    '2': {'1': 13, '3': 1, '5': 21, '4': 0, '6': 0},
    '5': {'1': 39, '3': 0, '2': 1, '4': 0, '6': 14},
    '4': {'1': 1, '3': 1, '2': 17, '5': 2, '6': 0},
    '6': {'1': 0, '3': 43, '2': 0, '5': 0, '4': 1}}
Run Code Online (Sandbox Code Playgroud)

它应该在矩阵中排序,所以它看起来像这样:

        1  2  3  4   5   6
     1  -  1  0  0   1   29
     2  13 -  1  0   21  0
     3  0  0  -  1   0   1
     4  1  17 1  -   2   0
     5  39 1  0  0   -   14
     6  0  0  43 1   0   -
Run Code Online (Sandbox Code Playgroud)

我只是试图了解如何制作矩阵:

    table=[[for 0 in range(6)] for j in range[6]]
    print table
    for d1 in range(6):
        for d2 in range(6):
            table[d1][d2]=d1+d2+2
    print table
Run Code Online (Sandbox Code Playgroud)

但我有一本字典,而不是列表.我真的迷路了.

eum*_*iro 16

importpandasas pd

a = pd.DataFrame({'1': {'3': 0, '2': 1, '5': 1, '4': 0, '6': 29},
                  '3': {'1': 0, '2': 0, '5': 0, '4': 1, '6': 1},
                  '2': {'1': 13, '3': 1, '5': 21, '4': 0, '6': 0},
                  '5': {'1': 39, '3': 0, '2': 1, '4': 0, '6': 14},
                  '4': {'1': 1, '3': 1, '2': 17, '5': 2, '6': 0},
                  '6': {'1': 0, '3': 43, '2': 0, '5': 0, '4': 1}})
Run Code Online (Sandbox Code Playgroud)

投入a:

    1   2   3   4   5   6
1 NaN  13   0   1  39   0
2   1 NaN   0  17   1   0
3   0   1 NaN   1   0  43
4   0   0   1 NaN   0   1
5   1  21   0   2 NaN   0
6  29   0   1   0  14 NaN
Run Code Online (Sandbox Code Playgroud)

然后可以打印成您的格式:

print a.to_string(na_rep='-')
Run Code Online (Sandbox Code Playgroud)

打印:

    1   2   3  4   5   6
1   -   1   0  0   1  29
2  13   -   1  0  21   0
3   0   0   -  1   0   1
4   1  17   1  -   2   0
5  39   1   0  0   -  14
6   0   0  43  1   0   -
Run Code Online (Sandbox Code Playgroud)


Ash*_*ary 5

使用str.format():

dic = {'1': {'3': 0, '2': 1, '5': 1, '4': 0, '6': 29},
    '3': {'1': 0, '2': 0, '5': 0, '4': 1, '6': 1},
    '2': {'1': 13, '3': 1, '5': 21, '4': 0, '6': 0},
    '5': {'1': 39, '3': 0, '2': 1, '4': 0, '6': 14},
    '4': {'1': 1, '3': 1, '2': 17, '5': 2, '6': 0},
    '6': {'1': 0, '3': 43, '2': 0, '5': 0, '4': 1}}

strs = "{0:^2} {1:^2} {2:^2} {3:^2} {4:^2} {5:^2} {6:^2}"    

print strs.format(" ", *sorted(dic))

for x in sorted(dic):
    print strs.format(x, *(dic[x].get(y, '-') for y in sorted(dic)))
Run Code Online (Sandbox Code Playgroud)

输出:

   1  2  3  4  5  6 
1  -  1  0  0  1  29
2  13 -  1  0  21 0 
3  0  0  -  1  0  1 
4  1  17 1  -  2  0 
5  39 1  0  0  -  14
6  0  0  43 1  0  - 
Run Code Online (Sandbox Code Playgroud)

你也可以这样生成strs:

strs = " ".join("{"+"{0}{1}".format(i, ":^2}") for i in range(7))  
Run Code Online (Sandbox Code Playgroud)