将字典打印为表格数据
Printing dict as tabular Data
我正在尝试以表格格式打印 python 字典,但在使用字典时遇到困难。以下是我的命令:
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 │
╘════════╧═════════╧═══════╧═════════╧═════════════════╛
我们将不胜感激。
您需要将词典更改为预期格式之一,例如。字典列表:[{**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" 中的伪图形有疑问,请将其删除。您可能需要手动添加的总和
您需要将字典转换为数据框。试试这个:
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'
我正在尝试以表格格式打印 python 字典,但在使用字典时遇到困难。以下是我的命令:
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 │
╘════════╧═════════╧═══════╧═════════╧═════════════════╛
我们将不胜感激。
您需要将词典更改为预期格式之一,例如。字典列表:[{**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" 中的伪图形有疑问,请将其删除。您可能需要手动添加的总和
您需要将字典转换为数据框。试试这个:
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'