如何从CSV文件生成以球员名为外层键的嵌套字典?
解决CSV转嵌套字典的问题
需求说明
将包含球员薪资、评分等信息的CSV数据,转换为嵌套字典:
- 外层字典以**球员姓名(Player Name)**为键
- 每个键对应的内层字典以CSV的其他表头(
2022 Cap Number、Rating、Position)为键,对应对应的数据值
CSV示例内容
Player Name,2022 Cap Number,Rating,Position Poona Ford,"10,075,000",74,DT Tyler Lockett,"10,050,000",90,WR D.K. Metcalf,"8,838,827",89,WR Gabe Jackson,"7,237,778",79,G Uchenna Nwosu,"6,295,000",79,LB Quandre Diggs,"5,800,000",85,FS
期望输出
{ 'Poona Ford': {'2022 Cap Number': '"10075000"', 'Rating': '74', 'Position': 'DT'}, 'Tyler Lockett': {'2022 Cap Number': '"10050000"', 'Rating': '90', 'Position': 'WR'}, 'D.K. Metcalf': {'2022 Cap Number': '"8838827"', 'Rating': '89', 'Position': 'WR'}, 'Gabe Jackson': {'2022 Cap Number': '"7237778"', 'Rating': '79', 'Position': 'G'}, 'Uchenna Nwosu': {'2022 Cap Number': '"6295000"', 'Rating': '79', 'Position': 'LB'}, 'Quandre Diggs': {'2022 Cap Number': '"5800000"', 'Rating': '85', 'Position': 'FS'} }
问题分析
用户尝试的代码存在两处问题:
- 语法错误:
csv_list的定义末尾缺少闭合括号],导致代码无法正常运行 - 格式不匹配:未处理薪资字符串中的逗号,无法生成期望输出的格式;推导式变量名与外层变量重名(虽不影响功能,但易造成混淆)
修正后的代码
csv_list = [ ['Player Name', '2022 Cap Number', 'Rating', 'Position'], ['Poona Ford', '"10,075,000"', '74', 'DT'], ['Tyler Lockett', '"10,050,000"', '90', 'WR'], ['D.K. Metcalf', '"8,838,827"', '89', 'WR'], ['Gabe Jackson', '"7,237,778"', '79', 'G'], ['Uchenna Nwosu', '"6,295,000"', '79', 'LB'], ['Quandre Diggs', '"5,800,000"', '85', 'FS'] ] # 拆分表头和数据 (_, *header), *data = csv_list csv_dict = {} for row in data: player_name, *values = row # 清洗薪资字符串,移除其中的逗号 cleaned_values = [v.replace(',', '') if i == 0 else v for i, v in enumerate(values)] # 用表头和清洗后的值构建内层字典 csv_dict[player_name] = {h: v for h, v in zip(header, cleaned_values)} print(csv_dict)
代码说明
- 补全
csv_list的闭合括号,修复语法错误 - 将循环变量
key改为player_name,避免与推导式中的变量混淆 - 添加薪资字符串清洗逻辑,移除其中的逗号,匹配期望输出格式
- 使用列表推导式和字典推导式,高效构建嵌套字典结构
内容的提问来源于stack exchange,提问作者Max Pattillo
相关产品推荐
相关产品推荐

