如何按键排序字典并将其打印到表格中

时间:2016-04-21 15:02:39

标签: python python-3.x dictionary key

我在另一个字典里面有一个字典,即我有一个股票字典(如超市),其中包含产品的字典(如苹果),这些字典有其名称,数量等。我需要按键对其进行排序并打印出来作为一张桌子。

目前我有,

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个数字,其余的是该字典的一部分。

感谢。

2 个答案:

答案 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))