是否可以将tabulate函数与三级深度的字典一起使用?我从源头上取了这本字典,并对它进行了一些修改,只是为了用作一个想法。
MENU = {
"espresso":
{
"ingredients 1":
{
"water": 50,
"coffee": 18,
},
"ingredients 2":
{
"water": 55,
"coffee": 20,
}
}
},
"latte":
{
"ingredients 1":
{
"water": 200,
"coffee": 24,
},
"ingredients 2":
{
"water": 225,
"coffee": 30,
}
}
},
"cappuccino":
{
"ingredients 1":
{
"water": 150,
"coffee": 45,
},
"ingredients 2":
{
"water": 155,
"coffee": 40,
}
}
}
}
我要找的是这样的东西:
Drink Info Water Coffee
-------- ------ ----- ------
Espresso Ingredients 1 50 18
Espresso Ingredients 2 55 20
Latte Ingredients 1 50 18
Latte Ingredients 2 55 20
Cappuccino Ingredients 1 50 18
Cappuccino Ingredients 2 55 20
或者这个:
Drink Info Water Coffee
-------- ------ ----- ------
Espresso Ingredients 1 50 18
Ingredients 2 55 20
Latte Ingredients 1 50 18
Ingredients 2 55 20
Cappuccino Ingredients 1 50 18
Ingredients 2 55 20
尝试:
MENU = {
"espresso": {
"ingredients 1": {
"water": 50,
"coffee": 18,
},
"ingredients 2": {
"water": 55,
"coffee": 20,
},
},
"latte": {
"ingredients 1": {
"water": 200,
"coffee": 24,
},
"ingredients 2": {
"water": 225,
"coffee": 30,
},
},
"cappuccino": {
"ingredients 1": {
"water": 150,
"coffee": 45,
},
"ingredients 2": {
"water": 155,
"coffee": 40,
},
},
}
fmt = "{:<20} {:<20} {:<20} {:<20}"
tmp = {}
for k1, v1 in MENU.items():
for k2, v2 in v1.items():
for k3, v3 in v2.items():
tmp.setdefault((k1, k2), {})[k3] = v3
for (k1, k2), v in tmp.items():
print(fmt.format(k1, k2, v["water"], v["coffee"]))
打印:
Drink Info Water Coffee
----------------------------------------------------------------------
espresso ingredients 1 50 18
espresso ingredients 2 55 20
latte ingredients 1 200 24
latte ingredients 2 225 30
cappuccino ingredients 1 150 45
cappuccino ingredients 2 155 40