Python3如何拆分字典中的name键为last和first字段?
问题分析与解决
你的代码存在两个核心问题:
- 第二个循环中使用的
name是第一个循环最后一次迭代的变量值,并非当前row对应的名字字段,导致拆分的不是每行的目标内容 - 拆分完成后没有将
last和first存入对应字典,也未处理原有的name键
修正后的代码(基于你的原有逻辑)
import csv import sys before = [] with open(sys.argv[1]) as file: reader = csv.reader(file) next(reader) # 跳过表头行 for name, house in reader: before.append({"name": name, "house": house}) # 拆分name为last和first for row in before: # 从当前行的name字段拆分 last, first = row["name"].split(", ") # 添加新的键值对 row["last"] = last row["first"] = first # 可选操作:删除原有的name键 del row["name"] # 测试输出结果 for row in before: print(row)
更高效的写法(读取时直接处理)
没必要先存储name再拆分,可在读取每行时直接处理,减少一次循环:
import csv import sys students = [] with open(sys.argv[1]) as file: reader = csv.reader(file) next(reader) # 跳过表头行 for name, house in reader: last, first = name.split(", ") students.append({"last": last, "first": first, "house": house}) # 测试输出结果 for student in students: print(student)
额外提示
如果CSV中的名字格式存在不统一的情况(比如逗号后没有空格),可以改用split(",", 1)拆分后再去除首尾空格:
last, first = name.split(",", 1) last = last.strip() first = first.strip()
内容的提问来源于stack exchange,提问作者Gabu
相关产品推荐
相关产品推荐

