You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python打印字典键及键值时出现非预期换行问题求解

问题原因
  • 你用f.readlines()读取文件内容时,每一行字符串末尾会自带文件里的换行符\n,也就是说存在字典里的键实际是Spinach\n、Broccoli\n这类带尾部换行的内容。
  • 打印时,键自带的换行符会先触发一次换行,后续的冒号和计数值自然就被挤到下一行显示了。
  • 额外提醒:你当前写的统计逻辑在遍历itemList的同时循环调用pop(i)修改列表本身,很容易出现索引错位、漏统计的问题,稳定性很差。
修正方法

核心是先把每行读取到的内容尾部的换行符去掉,再做后续统计;同时可以优化统计逻辑,避免边遍历边修改列表的隐患。修正后的完整代码如下:

def readInputFile():
    print("Reading \"GroceryList.txt\"")
    itemDict = {}
    # 用with上下文管理器操作文件,会自动完成文件关闭,无需手动调用close()
    with open("GroceryList.txt", "r") as f:
        # 读取所有行,逐行移除尾部的换行符,不处理字符串中间的空格
        itemList = [line.rstrip('\n') for line in f.readlines()]
    
    # 统计逻辑:遍历列表逐次计数,不修改原列表,不会出现索引错误
    for item in itemList:
        itemDict[item] = itemDict.get(item, 0) + 1
    
    # 此时键已经不带换行符,打印内容会正常显示在同一行
    for key in itemDict:
        print(f"{key}: {itemDict[key]}")

如果你暂时不想调整读取和统计逻辑,只需要修复打印格式,也可以直接在打印时去掉键尾部的换行:

for key in itemDict:
    print("{}: {}".format(key.rstrip('\n'), itemDict[key]))

这种临时方案治标不治本,还是推荐从读取阶段就清理掉多余的换行符,避免后续其他逻辑受影响。

内容的提问来源于stack exchange,提问作者Syd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 07:27:18