我有本字典:
dic = {"HM1": ['Jackson','Matt','M','Football'], "SM2":['Scott','Max','M']}我需要一个代码,“写”这些字典数据到csv文件的形式:
HM1,Jackson,Matt,M,Football
SM2,Scott,Max,M我有一个不起作用的代码:
with open("file.csv", "w", newline="") as new_data:
fieldnames = ['ID','Firstname','Lastname','Gender','Sports']
data_writer = csv.DictWriter(new_data, fieldnames=fieldnames)
for k in dic.keys():
r = dic[k]
data_writer.writerow({'ID':r[0],'Firstname':r[1],'Lastname':r[2],'Gender':r[3],'Sports':r[4]})发布于 2018-02-03 03:31:55
首先,确保你的列表具有相同的长度,
如果是这样,您必须将其转换为数据帧,并使用pandas模块将数据帧转换为csv文件: inatall使用
pip install pandas然后像这样导入它:
import pandas as pd
df = pd.DataFrame({"HM1": ['Jackson','Matt','M','Football'], "SM2":['Scott','Max','M', '']})
df = df.T
df.to_csv('path_to_file.csv', header=False)UPDATE:如果您的数据列表没有相同的长度,您可以像这样继续:
data_dict= {"HM1": ['Jackson','Matt','M','Football'], "SM2":['Scott','Max','M']}
df = pd.DataFrame(data=[x for x in data_dict.values()], index= data_dict.keys())
df.fillna('', inplace=True)
df.to_csv('path_to_file.csv', header=False)发布于 2018-02-03 04:08:35
已更正代码:
with open("file.csv", "w", newline="") as new_data:
fieldnames = ['ID','Firstname','Lastname','Gender','Sports']
data_writer = csv.DictWriter(new_data, fieldnames=fieldnames)
data_writer.writeheader()
for k,r in dic.items():
data_writer.writerow({fieldnames[i]: k if i == 0 else r[i-1] for i in range(len(r)+1)}) 原始代码中的一些问题:
1.)您从未从字典键中写入"ID“列。
2.)您可以轻松地迭代dic.items(),它同时返回键和项,而不是使用r = dic[k]。3.)您的r返回一个IndexError,因为您的第二行缺少一个值,因此r[4]将引发一个列表长度仅为3的错误。这可以通过列表理解来轻松地动态处理。
无论如何,输出
足球ID,名字,姓氏,性别,体育HM1,杰克逊,马特,M,足球SM2,斯科特,最大,M,
我建议你以某种方式处理列表中丢失的数据(比如'N/A'),而不是仅仅让列表的长度不均匀。另一个答案的pandas解决方案很棒,但如果您对该模块或安装外部模块感到不舒服,则此解决方案仅适用于csv。
https://stackoverflow.com/questions/48589525
复制相似问题