我正在尝试以表格格式打印python字典,但是在使用dict时遇到困难。以下是我的字典:
board_dict =
{
'Done': {
'point': 0.0,
'items': 1
},
'Doing': {
'point': 24.0,
'items': 3
},
'New': {
'point': 0.0,
'items': 2
},
'Stuck': {
'point': 19.0,
'items': 3
},
'Ready to Test': {
'point': Decimal('1'),
'items': 1
}
}
我正在尝试设计类似这样的东西:
Column Items Points
------ ----- ------
Sprint Backlog 0 0
Doing 3 24
Stuck 3 19
Code Review 0 0
Ready to Test 1 1
Done 1 0
------
Total 8 44
------
我已尝试使用python tabulate
https://pypi.org/project/tabulate/
print(tabulate(board_dict, headers="keys", tablefmt="fancy_grid"))
╒════════╤═════════╤═══════╤═════════╤═════════════════╕
│ Done │ Doing │ New │ Stuck │ Ready to Test │
╞════════╪═════════╪═══════╪═════════╪═════════════════╡
│ point │ point │ point │ point │ point │
├────────┼─────────┼───────┼─────────┼─────────────────┤
│ items │ items │ items │ items │ items │
╘════════╧═════════╧═══════╧═════════╧═════════════════╛
任何帮助都会得到帮助。
答案 0 :(得分:3)
您需要将字典转换为数据框。试试这个:
df = pd.DataFrame(board_dict)
print(tabulate(df.T, headers="keys"))
打印输出:
items point
------------- ------- -------
Done 1 0
Doing 3 24
New 2 0
Stuck 3 19
Ready to Test 1 1
如果您还需要总和,请尝试以下操作:
df = pd.DataFrame(board_dict)
df = df.T
df.columns = ["_items", "_points"]
df = df.astype(int)
df.loc["Total"] = df.sum().T
print(tabulate(df, headers="keys"))
打印输出:
_items _points
------------- -------- ---------
Done 1 0
Doing 3 24
New 2 0
Stuck 3 19
Ready to Test 1 1
Total 10 44
请注意,items
并不是很好的列名,因为它也是Python函数名。因此,我将其更改为_items
。
我也将您的字典'point': Decimal('1')
的这一行更改为'point':'1'
的这一行
答案 1 :(得分:2)
您需要将字典更改为预期格式之一,例如。词典列表:[{**v, 'column': k } for k, v in d.items() ]
,而不是原始词典
列表列表甚至更容易理解
tabulate( [[k, v['items'], v['point'] for k, v in d.items()],
headers = ['columns', 'items', 'points'])
还支持列表字典:
keys = d.keys()
values = d.values() )
d2 = { 'columns': keys,
'items': [v['items'] for v in values],
'points': [v['point'] for v in values]
}
tabulate(d2, headers = 'keys')
此外,如果“ fancy_grid”中的伪图形有问题,请将其删除。您可能需要手动添加的金额