我有一本字典:
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]})
答案 0 :(得分:1)
首先,确保您的列表具有相同的长度,
如果是这样,你必须将它转换为数据帧并使用pandas模块将数据帧转换为csv文件: 通过使用
来安装它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)
更新: 如果您的数据列表没有相同的长度,您可以像这样进行:
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)
答案 1 :(得分:0)
更正后的代码:
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]
会返回键和项,而不是使用r
。
3.)您的IndexError
返回r[4]
,因为您的第二行缺少值,因此ID,Firstname,Lastname,Gender,Sports
HM1,Jackson,Matt,M,Football
SM2,Scott,Max,M,
会引发错误,列表长度仅为3.这可以很容易地动态处理相反,列表理解。
无论如何,输出:
pandas
我建议你以某种方式处理列表中缺少的数据(比如'N / A')而不是仅仅留下不均匀长度的列表。另一个答案的csv
解决方案很棒,但如果您对该模块或一般安装外部模块不满意,此解决方案仅支持{{1}}。