Python未手动添加键时字典自动出现title键的排查方法
字典异常"title"键排查方法
检查键是否存在
- 直接执行
print("title" in titles),返回True即可确认键存在,返回False就是视觉误判。 - 要查看所有键的完整形态,执行
print(titles.keys());如果怀疑是带隐藏空格、大小写混淆的相似键,用print([repr(k) for k in titles.keys()])打印,repr会把字符串里的不可见字符、前后空格都显示出来,避免把"TITLE"、" title "这类值错看成"title"。
定位键自动添加的原因
你贴的代码逻辑本身没有主动写入"title"键的语句,最后遍历字典的for title in titles只是用临时变量接收遍历到的键名,不会给字典新增内容。另外这段代码里所有存入titles的键都经过了.upper()转大写,正常不可能出现全小写的"title"值,如果你看到的确实是全小写键,先确认你实际运行的就是当前贴出的代码,没有跑旧版本的缓存文件。
问题几乎都出在数据源或者残留测试代码上,按下面步骤查:
- 先确认CSV表头识别正确
csv.DictReader默认把文件第一行作为表头,在打开文件的代码块里加一句print("识别到的表头:", reader.fieldnames),确认"GameNumber"字段确实存在,没有因为编码、分隔符错误把表头识别错。 - 加行级调试定位异常来源
给读取行的循环加调试判断,一旦处理后的键名匹配你看到的异常值,就打印对应行号和内容,直接定位是哪条数据写入的异常键,参考代码:
import csv
titles = {}
with open("sample4.csv", "r") as file:
reader = csv.DictReader(file)
print("识别到的CSV表头:", reader.fieldnames)
# 行号从2开始计数,第一行是表头
for line_num, row in enumerate(reader, start=2):
title = row["GameNumber"].strip().upper()
# 这里的判断值改成你实际看到的异常键,比如看到小写title就写title == "title"
if title == "TITLE":
print(f"异常来自第{line_num}行,行内容:{row}")
if title in titles:
titles[title] += 1
else:
titles[title] = 1
3. 直接检查CSV原始文件 大部分这类问题都是CSV文件本身混入了异常行: - 查看GameNumber列有没有值为"title"的行,常见于文件里混进的备注行、汇总行、重复的表头行 - 检查文件有没有空行、错列行:如果某行列数不对,GameNumber列可能取到相邻列的"title"值 - 确认没有在`titles = {}`初始化之后、循环之前写过给titles添加"title"键的测试代码,避免残留逻辑影响结果。 内容的提问来源于stack exchange,提问作者Arbi Said
相关产品推荐
相关产品推荐

