从CSV文件创建Python字典时遇数据格式与输出问题求助
解决CSV转Python字典的三个问题
问题说明
处理CSV文件时遇到三类问题:
- 城市名带前导空格
- 城市列表中存在空字符串
- 字典输出格式过于紧凑,可读性差
原CSV结构示例
Alabama, Alexander City, Decatur, Florence, Gadsden, Greenville, Guntersville, Huntsville,... Arizona, Ajo, Avondale, Bisbee, Casa Grande, Chandler, Clifton,... Arkansas, Arkadelphia, Arkansas, West Memphis,... California, Alameda, Alhambra, Anaheim, Yorba Linda, Yuba City,...
修正后的代码
import csv my_dict = {} with open('cities.csv', 'r') as csvfile: csvreader = csv.reader(csvfile) for row in csvreader: # 清理数据:去除元素前后空白,过滤空字符串 cleaned_row = [item.strip() for item in row if item.strip()] if not cleaned_row: continue # 跳过空行 # 提取州名和城市列表 state = cleaned_row[0] cities = cleaned_row[1:] my_dict[state] = cities # 按预期格式逐个打印键值对 for state, cities in my_dict.items(): print(f"{{'{state}' : {cities}}}")
关键处理逻辑
- 数据清洗:通过列表推导式对每个元素执行
strip()去除前后空白,同时过滤掉空字符串(解决原CSV末尾逗号产生的空值问题)。 - 键值提取:从清理后的行中拆分州名和城市列表,避免原代码中
pop()操作可能带来的意外问题。 - 格式化输出:循环遍历字典的键值对,用f-string按指定格式打印,替代默认的紧凑字典输出。
最终输出效果
{'Alabama' : ['Alexander City', 'Decatur', 'Florence', 'Gadsden', 'Greenville', 'Guntersville', 'Huntsville']} {'Arizona' : ['Ajo', 'Avondale', 'Bisbee', 'Casa Grande', 'Chandler', 'Clifton']} {'Arkansas' : ['Arkadelphia', 'Arkansas', 'West Memphis']} {'California' : ['Alameda', 'Alhambra', 'Anaheim', 'Yorba Linda', 'Yuba City']}
内容的提问来源于stack exchange,提问作者user3834254
相关产品推荐
相关产品推荐

