我在另一个字典里面有一个字典,即我有一个股票字典(如超市),其中包含产品的字典(如苹果),这些字典有其名称,数量等。我需要按键对其进行排序并打印出来作为一张桌子。
目前我有,
stock = load_stock_from_file()
print("{0} | {1:<35} | {2:^11} | {3:^12} ".format("Ident", "Product", "Price", "Amount"))
print("-" * 6 + "+" + "-"*37+"+"+"-"*13+"+"+"-"*12)
for key in sorted(stock):
print("{name:<35} | {price:^11} | {amount:^12} ".format(**key))
这就是我想要的(下面),但我得到错误'TypeError:format()参数**必须是映射,而不是str'
Ident | Product | Price | Amount
-------+-------------------------------------+-----------+-------------
10000 | Granny Smith Apples Loose | 0.32 £ | 6 pieces
10001 | Watermelon Fingers 90G | 0.50 £ | 17 pieces
10002 | Mango And Pineapple Fingers 80G | 0.50 £ | 2 pieces
10003 | Melon Finger Tray 80G | 0.50 £ | 10 pieces
10004 | Bananas Loose | 0.68 £ | 2.2 kg
10005 | Conference Pears Loose | 2.00 £ | 1.6 kg
我的密钥是10000个数字,其余的是该字典的一部分。
感谢。
答案 0 :(得分:2)
该错误表明您的密钥变量是str。我想你需要格式化值而不是元素。你可以尝试:
for key in sorted(stock):
print("{name:<35} | {price:^11} | {amount:^12} ".format(**stock[key]))
答案 1 :(得分:1)
您将密钥(这是一个字符串)传递给格式方法,因为双星会在这种情况下需要字典。您只需在循环中将key
替换为stock[key]
即可。
你可以在这里使用format_map
字符串方法,然后你不需要用双星解包字典。
for key in sorted(stock):
print(key, end=' ')
print("{name:<35} | {price:^11} | {amount:^12} ".format_map(stock[key]))
如果您想按价格或其他价值排序,您可以这样做:
for ident, dicti in sorted(stock.items(), key=lambda item: item[1]['price']):
print(ident, end=' ')
print("{name:<35} | {price:^11} | {amount:^12} ".format_map(dicti))