Python格式化输出字典价格时如何消除货币符号与数值的多余空格
问题根因
原代码的格式化逻辑将货币符号$和数值拆分为独立部分处理:
模板"${:>6.2f}"的运行规则是:固定输出$符号,后方的数值单独占6个字符宽度、右对齐。当数值本身长度不足6位时,系统会自动在$和数值之间填充空格,最终形成$ 5.40这种符号与数值分离的多余间隔。
修改方案
要实现货币符号紧贴数值、整列价格纵向对齐的效果,需把$和数值合并为一个整体格式化字符串,再对这个带货币符号的完整字符串设置右对齐宽度,让多余空格全部补在货币符号前方,而非填充在符号与数字之间。
两种可直接复用的写法:
- 搭配f-string(语法简洁,Python 3.6及以上版本支持):将原循环中的打印行
替换为print("{:<41}${:>6.2f}".format(i["name"],i["price"]))print("{:<41}{:>7}".format(i["name"], f"${i['price']:.2f}")) - 纯format语法(兼容全版本Python):
print("{:<41}{:>7}".format(i["name"], "${:.2f}".format(i["price"])))
补充说明:此处设置价格区域宽度为7,是因为列表中最长的带
$价格为$16.98(共6个字符长度),多出的宽度会作为短价格的前置补白,保证所有价格的最右边缘完全对齐,同时符号和数字之间无多余间隔。
完整可运行示例
foodItems = [{"name":"6 Apples", "price": 5.40}, {"name": "Mixed Vegetables Pack 1kg", "price": 9.32}, {"name": "Yakult 5 in a pack", "price": 3.20}, {"name": "Mixed nuts 500g", "price": 16.98}, {"name": "Milk Powder 200g", "price": 9.47}, {"name": "Roasted Chicken Breast 1kg", "price": 8.56}] print("Food items available for subscription (price/week)") # display food items for item in foodItems: print("{:<41}{:>7}".format(item["name"], f"${item['price']:.2f}"))
实际输出效果
Food items available for subscription (price/week) 6 Apples $5.40 Mixed Vegetables Pack 1kg $9.32 Yakult 5 in a pack $3.20 Mixed nuts 500g $16.98 Milk Powder 200g $9.47 Roasted Chicken Breast 1kg $8.56
内容的提问来源于stack exchange,提问作者newtoprogramming
相关产品推荐
相关产品推荐

