Python如何实现字典键值对按两列等宽格式成对打印输出
Python字典两列等宽对齐打印方案
问题对应解决逻辑
- 每次迭代打印两组键值对:不需要在遍历过程中动态获取下一个迭代元素,直接将字典键值对转为列表后按步长2遍历即可,逻辑简单且容易处理键值对总数为奇数的边界场景。
- 列对齐实现:利用Python f-string的左对齐格式化语法,自动补空格填充到指定宽度;宽度支持手动固定为40字符,也可以提前遍历所有键值对计算最长字符串长度,自动适配列宽。
可直接运行的代码
自动适配最长键值对宽度版本
example = { 'key0': 'val0', 'key1': 'val1', 'key2': 'val2', 'key3': 'val3', 'key4': 'val4', 'key5': 'val5' } # 预处理所有键值对为"键: 值"格式的字符串 item_strs = [f"{key}: {val}" for key, val in example.items()] # 计算列宽:最长字符串长度+2个字符作为列间距 col_width = max(len(s) for s in item_strs) + 2 # 按步长2遍历,每次取两个元素打印 for idx in range(0, len(item_strs), 2): left_col = item_strs[idx] # 处理键值对总数为奇数的情况,避免索引报错 right_col = item_strs[idx+1] if idx + 1 < len(item_strs) else "" # 左列按指定宽度左对齐,拼接右列打印 print(f"{left_col:<{col_width}}{right_col}")
固定40字符列宽版本
仅需要把上述代码中计算col_width的行替换为固定值即可:
col_width = 40
补充:迭代中动态获取下一个键值对的实现(不推荐)
如果一定要在单次循环内动态获取下一个迭代元素,可借助itertools.tee复制迭代器实现,但该方案需要额外处理奇数长度的边界问题,可读性较差:
from itertools import tee item_iter = example.items() cur_iter, next_iter = tee(item_iter) next(next_iter, None) # 两两配对遍历,最后一个奇数位元素会被遗漏,需单独补打印逻辑 for (k1, v1), (k2, v2) in zip(cur_iter, next_iter): print(f"{k1}: {v1:<40}{k2}: {v2}")
运行测试字典的输出效果和预期完全一致:
key0: val0 key1: val1 key2: val2 key3: val3 key4: val4 key5: val5
内容的提问来源于stack exchange,提问作者a79ce734e1
相关产品推荐
相关产品推荐

