将字典中的数据以特定形式写入csv文件

2024-05-13 14:59:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本字典:

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]})

Tags: csv代码idnewdata字典mattscott
2条回答

更正代码:

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,Firstname,Lastname,Gender,Sports
HM1,Jackson,Matt,M,Football
SM2,Scott,Max,M,

我建议您以某种方式处理列表中丢失的数据(如“N/A”),而不是让列表长度不均匀。另一个答案的pandas解决方案很好,但是如果您对该模块或安装外部模块不太满意,那么这个解决方案只能使用csv

首先,确保你的列表长度相同

如果是这样,您必须使用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)

相关问题 更多 >