垂直打印列表字典

Tre*_*era 1 python dictionary list python-3.x

我想垂直打印以下列表字典:

result = {'WeightedLevel': [388.850952, 716.718689, 1312.55957, 2405.087158, 4460.083984, 8543.792969, 18805.201172, 57438.140625, 1792.367554], 'Job': 'Desktop', 'LoadLevel': [0.212399, 0.393191, 0.727874, 1.347436, 2.494368, 4.617561, 8.548006, 15.824027, 1.0], 'Task': 'test', 'Failure': [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0], 'Blocks': [7255.151855, 231.589661, 9.365415, 0.55364, 0.0504, 0.006408, 0.001204, 0.000842, 2.060041]}
Run Code Online (Sandbox Code Playgroud)

所以看起来应该是这样的:

Job           Task          LoadLevel         Blocks          Failure         WeightedLevel
Desktop       test          4546543           4384284         0,46544564      0,1354385
                            474454            978456          2               9655
                            9655              55654           966             665 
Run Code Online (Sandbox Code Playgroud)

等等...

我尝试过在网上找到的一些代码,但它们仍然会横向打印结果:

for k, d in result.items():
    print(k + ":", d)         
Run Code Online (Sandbox Code Playgroud)

print("\t".join(str(x) for x in result))
Run Code Online (Sandbox Code Playgroud)

unu*_*tbu 5

漂亮的打印表需要大量的代码(table-recipe,pretty-table).在特定的基础上编写这种代码并不好玩; 你不妨使用精心设计的模块.

如果你有pandas,你可以将dict直接转储到DataFrame中,然后像这样打印:

In [4]: import pandas as pd
In [5]: result = {'WeightedLevel': [388.850952, 716.718689, 1312.55957, 2405.087158, 4460.083984, 8543.792969, 18805.201172, 57438.140625, 1792.367554], 'Job': 'Desktop', 'LoadLevel': [0.212399, 0.393191, 0.727874, 1.347436, 2.494368, 4.617561, 8.548006, 15.824027, 1.0], 'Task': 'test', 'Failure': [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0], 'Blocks': [7255.151855, 231.589661, 9.365415, 0.55364, 0.0504, 0.006408, 0.001204, 0.000842, 2.060041]}

In [6]: pd.DataFrame(result)
Out[6]: 
        Blocks  Failure      Job  LoadLevel  Task  WeightedLevel
0  7255.151855        2  Desktop   0.212399  test     388.850952
1   231.589661        2  Desktop   0.393191  test     716.718689
2     9.365415        2  Desktop   0.727874  test    1312.559570
3     0.553640        2  Desktop   1.347436  test    2405.087158
4     0.050400        2  Desktop   2.494368  test    4460.083984
5     0.006408        2  Desktop   4.617561  test    8543.792969
6     0.001204        2  Desktop   8.548006  test   18805.201172
7     0.000842        2  Desktop  15.824027  test   57438.140625
8     2.060041        2  Desktop   1.000000  test    1792.367554

[9 rows x 6 columns]
Run Code Online (Sandbox Code Playgroud)

这是一种在不使用第三方模块的情况下以类似表格式打印字典的方法:

import itertools as IT

result = {'WeightedLevel': [388.850952, 716.718689, 1312.55957, 2405.087158, 4460.083984, 8543.792969, 18805.201172, 57438.140625, 1792.367554], 'Job': 'Desktop', 'LoadLevel': [0.212399, 0.393191, 0.727874, 1.347436, 2.494368, 4.617561, 8.548006, 15.824027, 1.0], 'Task': 'test', 'Failure': [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0], 'Blocks': [7255.151855, 231.589661, 9.365415, 0.55364, 0.0504, 0.006408, 0.001204, 0.000842, 2.060041]}

matrix = zip(*[value if isinstance(value, list) else IT.repeat(value) for key,value in result.items()])
print(''.join(['{:15}'.format(key) for key in result.keys()]))
for row in matrix:
    print(''.join(['{:15}'.format(str(item)) for item in row]))
Run Code Online (Sandbox Code Playgroud)

产量

Task           Blocks         LoadLevel      Failure        Job            WeightedLevel  
test           7255.151855    0.212399       2.0            Desktop        388.850952     
test           231.589661     0.393191       2.0            Desktop        716.718689     
test           9.365415       0.727874       2.0            Desktop        1312.55957     
test           0.55364        1.347436       2.0            Desktop        2405.087158    
test           0.0504         2.494368       2.0            Desktop        4460.083984    
test           0.006408       4.617561       2.0            Desktop        8543.792969    
test           0.001204       8.548006       2.0            Desktop        18805.201172   
test           0.000842       15.824027      2.0            Desktop        57438.140625   
test           2.060041       1.0            2.0            Desktop        1792.367554    
Run Code Online (Sandbox Code Playgroud)