将嵌套字典写入CSV文件

0 投票
2 回答
1574 浏览
提问于 2025-04-18 18:44

新手问题:我想写一个函数,把一个嵌套字典写入到一个csv文件里,所以我从Stack Overflow上找了一些代码(将嵌套字典转换为CSV表格),但是我一直收到错误信息,说“dict”不可调用。因为我不太明白那部分代码在干什么,所以很难找到问题所在。
有人能帮我解释一下,并帮我修复我的代码吗?

这是我的代码:

def dict_to_csv(dict, txtFileName, destination_file):

    with open(destination_file, 'wb') as f:
        writer = csv.DictWriter(f, dict.keys())
        writer.writeheader()
        for key, row in dict.iteritems():
            writer.writerow(dict(row, **{'': key})) #this is the row where I'm getting the error message
    f.closed()

提前谢谢你的帮助!

这是我使用的字典的一个示例:
{'20140524X21540': {'': '', '业余建造': '是', '制造商': 'KENNETH A BERGER', '地点': '" Electric City, WA "', '总无伤人数': '', '纬度': '', '事件ID': '20140524X21540', '机场名称': 'N/A', '飞机类别': '未知', '调查类型': '事故', '报告状态': '初步', '事件日期': '05/24/2014', '总致命伤亡': '1', '国家': '美国', '天气状况': 'VMC', '注册号': 'N249PW', '事故编号': 'WPR14FA209', '发动机数量': '', '经度': '', '航空公司': '', '总重伤人数': '', '机场代码': '', '型号': 'SEAREY LSX', '飞行大阶段': '', '发布日期': '05/29/2014', 'FAR描述': '第91部分:一般航空', '发动机类型': '', '计划': '', '飞行目的': '个人', '飞机损坏': '严重', '伤害严重性': '致命(1)', '总轻伤人数': ''}, '20140529X73728': {'': '', '业余建造': '', '制造商': 'ROBINSON HELICOPTER COMPANY', '地点': '" Chugiak, AK "', '总无伤人数': '', '纬度': '61.417778', '事件ID': '20140529X73728', '机场名称': '', '飞机类别': '直升机', '调查类型': '事故', '报告状态': '初步', '事件日期': '05/28/2014', '总致命伤亡': '1', '国家': '美国', '天气状况': 'VMC', '注册号': 'N392GP', '事故编号': 'ANC14FA030', '发动机数量': '1', '经度': '-149.500833', '航空公司': '', '总重伤人数': '', '机场代码': '', '型号': 'R44 II', '飞行大阶段': '', '发布日期': '05/30/2014', 'FAR描述': '第133部分:旋翼机外部负载', '发动机类型': '活塞式', '计划': '', '飞行目的': '外部负载', '飞机损坏': '毁坏', '伤害严重性': '致命(1)', '总轻伤人数': ''}, '20140320X40839': {'': '', '业余建造': '否', '制造商': 'CESSNA', '地点': '" Charlottesville, VA "', '总无伤人数': '1', '纬度': '38.139722', '事件ID': '20140320X40839', '机场名称': 'CHARLOTTESVILLE-ALBEMARLE', '飞机类别': '飞机', '调查类型': '事故', '报告状态': '可能原因', '事件日期': '03/08/2014', '总致命伤亡': '', '国家': '美国', '天气状况': 'VMC', '注册号': 'N5423J', '事故编号': 'ERA14CA160', '发动机数量': '1', '经度': '-78.452222', '航空公司': '', '总重伤人数': '', '机场代码': 'CHO', '型号': '172N', '飞行大阶段': '着陆', '发布日期': '05/05/2014', 'FAR描述': '第91部分:一般航空', '发动机类型': '活塞式', '计划': '', '飞行目的': '个人', '飞机损坏': '严重', '伤害严重性': '非致命', '总轻伤人数': ''}}

2 个回答

1

在编程中,有时候我们需要让程序在特定的条件下执行某些操作。这就像给程序设定了一些规则,只有当这些规则被满足时,程序才会继续进行。比如,你可能希望程序在用户输入正确的密码后才能进入系统,这样可以保护系统的安全。

另外,程序也可以根据不同的情况做出不同的反应。比如,如果用户输入的密码错误,程序可以给出提示,告诉用户再试一次。这种根据条件来决定程序行为的方式,称为“条件语句”。

总之,条件语句就像是程序的判断力,让它能够根据不同的情况做出不同的决定。

import pandas as pd
data = pd.DataFrame(dict)
data.to_csv("./filename.csv")
1

首先,不要把像 dict 这样的对象名称当作变量名来用。你遇到的错误是因为你试图去 调用 这个变量 dict

在你提到的代码中,dict(...) 这一行的目的是把 defaultdict 转换成一个普通的 dict,这样就不会意外地创建新的键。使用 dict(...) 的方式就像下面这个代码片段:

a = [1,2,3,4,5] # list
b = set(a) # conversion to set

解决这个问题很简单:换个变量名!

def dict_to_csv(my_dict, txtFileName, destination_file):

    with open(destination_file, 'wb') as f:
        writer = csv.DictWriter(f, my_dict.keys())
        writer.writeheader()
        for key, row in my_dict.iteritems():
            writer.writerow(dict(row, **{'': key})) #this is the row where I'm getting the error message
    f.closed()

撰写回答