打印键,值对作为二维表

时间:2020-10-25 19:13:08

标签: python dictionary printing formatting

我正在尝试将我的路由表变成一个漂亮的打印表,但是格式有麻烦。我在下面包含了我的代码。

所以我想要这个:

╒══════╤══════╤══════╤══════╤══════╕
│ RA   │   H1  │   H2  │   RA │   RB  │
╞══════╪══════╪══════╪══════╪══════╡
│ RA   │    1  │    4  │    0 │    1  │
├──────┼──────┼──────┼──────┼──────┤
│ RB   │    2  │    3  │    1 │    0  │
╘══════╧══════╧══════╧══════╧══════╛ 

但是我明白了:(附带说明,只要有完整的列/行行,只要以表格格式显示就没有关系)

RA         H1         H2         RA         RB        
-------------------------
H1 :  {1: 4}
RA :  {0: 1}
H2 :  {4: 3}
RB :  {1: 0}
-------------------------
self.rt_tbl_D = {'H1': {1: 4}, 'RA': {0: 1}, 'H2': {4:3}, 'RB': {1:0}}      # {destination: {router: cost}}

我的打印代码是这样:

print("{:<10} {:<10} {:<10} {:<10} {:<10}".format('RA', 'H1', 'H2', 'RA', 'RB'))
print('-------------------------')
for key, value in self.rt_tbl_D.items():
    print(key + ' : ', value)
print('-------------------------')

1 个答案:

答案 0 :(得分:1)

我觉得这在某种程度上是作弊的,因为您(尚未)在第一栏中提到如何填充RA或RB,但是它向您展示了如何使用理解来生成列表,然后使用* operator将它们解压缩到打印语句中。

rt_tbl_D = {'H1': {1: 4}, 'RA': {0: 1}, 'H2': {4:3}, 'RB': {1:0}}      # {destination: {router: cost}}
keylist = ['RA', 'H1', 'H2', 'RA', 'RB']
print("{:<10} {:<10} {:<10} {:<10} {:<10}".format(*keylist))
print('--------------------------------------------------')
print("RA         {:<10}  {:<10} {:<10} {:<10}".format(*[k for key in keylist[1:] for k in rt_tbl_D[key].keys()]))
print("RB         {:<10}  {:<10} {:<10} {:<10}".format(*[k for key in keylist[1:] for k in rt_tbl_D[key].values()]))
print('--------------------------------------------------')

输出:

RA         H1         H2         RA         RB        
--------------------------------------------------
RA         1           4          0          1         
RB         4           3          1          0         
--------------------------------------------------