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
相关产品推荐
相关产品推荐

