将字典格式化为列对齐形式的实现方法求助
解决字典键与年份列对齐的问题
嘿,我来帮你搞定这个对齐的小问题!你现在的代码里直接用"{} {}".format(k,v)会因为不同字段名称的长度不一样,导致后面的年份列歪歪扭扭的。要实现整齐的列对齐,关键是给每个列指定固定宽度,或者动态计算最大宽度来适配所有字段名称,下面给你两种实用的方法:
方法1:固定宽度格式化(简单直接)
如果你的字段名称长度都差不多,可以直接给每个列设置固定的宽度,用左对齐(<)来保证内容整齐排列。假设你的degDict里的值是包含1981和2010数据的列表/元组,修改代码如下:
def displayDegrees(degDict): print('Master degrees conferred in fields.\n') # 表头也要对应对齐,给"Field of Study"分配20个字符宽度,年份各占5个 print("{:<20} {:<5} {:<5}".format("Field of Study", "1981", "2010")) for k, v in degDict.items(): # 字段名左对齐占20位,两个年份各占5位 print("{:<20} {:<5} {:<5}".format(k, v[0], v[1]))
比如如果你的字典是:
degDict = { "Computer Science": [1200, 5600], "Mathematics": [800, 3200], "Education": [2100, 4800] }
运行后输出会是整齐的:
Master degrees conferred in fields. Field of Study 1981 2010 Computer Science 1200 5600 Mathematics 800 3200 Education 2100 4800
方法2:动态计算最大宽度(适配任意字段长度)
如果你的字段名称长短不一,固定宽度可能会浪费空间或者不够用,这时候可以先计算所有字段名称的最大长度,再用这个长度来动态设置格式化宽度:
def displayDegrees(degDict): print('Master degrees conferred in fields.\n') # 找出最长的字段名称长度,加2留一点缓冲空间 max_field_len = max(len(field) for field in degDict.keys()) + 2 # 动态设置表头的宽度 print("{:<{}} {:<5} {:<5}".format("Field of Study", max_field_len, "1981", "2010")) for k, v in degDict.items(): # 用计算好的最大长度来对齐字段名 print("{:<{}} {:<5} {:<5}".format(k, max_field_len, v[0], v[1]))
这种方法不管你的字段名称是长是短,都能自动调整到最合适的宽度,保证列对齐的同时不会浪费空间。
小提示
- 格式化符号里的
<表示左对齐,如果想要右对齐可以用>,居中用^,根据你的需求调整就行。 - 确保
degDict里的值是可以拆分成1981和2010两个元素的结构(比如列表、元组),如果你的值是其他格式,记得对应调整取值方式哦!
内容的提问来源于stack exchange,提问作者Hannah L.
相关产品推荐
相关产品推荐

