如何将动物、年龄、性别数据分别填入Python Rich表格单元格?
解决Rich表格数据合并到单个单元格的问题
嘿,我看看你的代码问题出在哪——你现在用zip(*list)把原数据的列转成了行,还把每一行的元素用空格拼接成一个字符串传给add_row,这就导致所有数据都塞进了同一个单元格里啦。
问题根源
zip(*list)会把你的原列表[['Cat', '7', 'Female'], ['Dog', '0.5', 'Male'], ['Guinea Pig', '5', 'Male']]转成按列分组的迭代器,也就是变成了('Cat', 'Dog', 'Guinea Pig')、('7', '0.5', '5')、('Female', 'Male', 'Male')这三组。- 然后你用
' '.join(row)把每组元素拼成一个字符串,再传给add_row,这就相当于每一行只传了一个参数,自然所有内容都进第一列的单元格了。
修正方案
你需要直接遍历原列表的每一行,然后把行里的每个元素分别传给add_row方法(add_row支持多个位置参数,每个参数对应一列的单元格内容)。
修正后的完整代码:
from rich.console import Console from rich.table import Table # 注意:尽量不要用list作为变量名,会覆盖内置的list类型 animal_data = [['Cat', '7', 'Female'], ['Dog', '0.5', 'Male'], ['Guinea Pig', '5', 'Male']] table1 = Table(show_header=True, header_style='bold') table1.add_column('Animal') table1.add_column('Age') table1.add_column('Gender') # 直接遍历每一行数据,unpack每个元素作为add_row的参数 for row in animal_data: table1.add_row(*row) console = Console() console.print(table1)
运行效果
这样生成的表格就会把动物、年龄、性别分别对应到各自的列中:
┏━━━━━━━━━━━┳━━━━┳━━━━━━━┓ ┃ Animal ┃ Age┃ Gender┃ ┡━━━━━━━━━━━╇━━━━╇━━━━━━━┩ │ Cat │ 7 │ Female│ │ Dog │ 0.5│ Male │ │ Guinea Pig│ 5 │ Male │ └───────────┴────┴───────┘
另外提醒一句:尽量不要用list作为变量名,这会覆盖Python内置的list类型,可能导致后续代码出问题哦。
内容的提问来源于stack exchange,提问作者yeleek
相关产品推荐
相关产品推荐

