将CSV转为日期为键、多元组列表为值的字典时仅获单个值问题
解决CSV转日期键字典时丢失同日期多条记录的问题
问题原因
你用字典推导式写的代码之所以会丢失同日期的多条记录,是因为字典的键具有唯一性——每次遇到重复的日期键,新的[(rows[1],rows[2],rows[3])]会直接覆盖之前对应的值,最后每个日期只能保留最后一行的记录。
解决方案1:普通循环处理
直接遍历CSV每行数据,判断日期是否已在字典中,存在就追加记录,不存在就初始化列表:
import csv # 替换成你的CSV文件路径 with open('vaccine_data.csv', 'r') as vaccine_date_file: vaccine_data_reader = csv.reader(vaccine_date_file) mydict = {} for row in vaccine_data_reader: date_key = row[0] record_tuple = (row[1], row[2], row[3]) if date_key in mydict: mydict[date_key].append(record_tuple) else: mydict[date_key] = [record_tuple]
解决方案2:用collections.defaultdict简化代码
借助defaultdict可以自动为不存在的键初始化空列表,代码更简洁:
import csv from collections import defaultdict with open('vaccine_data.csv', 'r') as vaccine_date_file: vaccine_data_reader = csv.reader(vaccine_date_file) mydict = defaultdict(list) for row in vaccine_data_reader: mydict[row[0]].append( (row[1], row[2], row[3]) ) # 可选:如果需要将defaultdict转为普通字典 mydict = dict(mydict)
两种方法都能得到你期望的字典格式:同一日期键对应包含所有相关元组的列表。
内容的提问来源于stack exchange,提问作者Wali Temuri
相关产品推荐
相关产品推荐

