制表 - 如何级联表

时间:2016-09-04 20:04:48

标签: python python-3.x

我希望使用制表符显示另一个表。

我的方法:

test_table1 = tabulate([['Alice', 24], ['Bob', 19]])
test_table2 = tabulate([['Hans', 45], ['John', 38]])
master_headers = ["table1", "table2"]
master_table = tabulate([[test_table1, test_table2]],
                        master_headers, tablefmt="simple")
print(master_table)

但这导致两个表都显示在table1的列中。

请参阅: enter image description here

问题:如何在python中级联表,最好使用制表符(或类似的库)?

提前致谢!

莫夫

1 个答案:

答案 0 :(得分:1)

我真的不知道这是否是你得到的最佳选择,但这就是我想出来的

test_table1 = str(tabulate([['Alice', 24], ['Bob', 19]])).splitlines()
test_table2 = str(tabulate([['Hans', 45], ['John', 38]])).splitlines()
master_headers = ["table1", "table2"]
master_table = tabulate([list(item) for item in zip(test_table1,test_table2)],
                        master_headers, tablefmt="simple")
print(master_table)

输出:

table1     table2
---------  --------
-----  --  ----  --
Alice  24  Hans  45
Bob    19  John  38
-----  --  ----  --

<强>解释

目的是将字符串数组传递给 master_table tabulate,就像使用 test_table1 test_table2 一样

使用.splitlines()

>>>str(tabulate([['Alice', 24], ['Bob', 19]]))
>>>'-----  --\nAlice  24\nBob    19\n-----  --'
>>>str(tabulate([['Alice', 24], ['Bob', 19]])).splitlines()
>>>['-----  --', 'Alice  24', 'Bob    19', '-----  --']

所以我们有['----- --', 'Alice 24', 'Bob 19', '----- --']['---- --', 'Hans 45', 'John 38', '---- --'],但是我们无法通过这种方式传递它们,因为输出会非常奇怪:

table1     table2
---------  ---------  ---------  ---------
-----  --  Alice  24  Bob    19  -----  --
----  --   Hans  45   John  38   ----  --

因此我们需要zip这些列表,并将值转换为list,因为zip返回listtuple个对象,这就是这里发生的事情:

>>>[list(item) for item in zip(test_table1,test_table2)]
>>>[['-----  --', '----  --'],
   ['Alice  24', 'Hans  45'],
   ['Bob    19', 'John  38'],
   ['-----  --', '----  --']]

这就是tabulate如何根据需要轻松获取数据的方式。