将嵌套字典写入csv文件

时间:2014-08-27 17:19:18

标签: python csv dictionary

新手问题:我试图编写一个函数来将嵌套字典写入csv文件,所以我从Stack Overflow(Convert Nested Dictionary to CSV Table)中提取了一些代码,但我不断收到错误消息"字典"不可赎回。由于我并不真正理解代码的哪一部分正在做什么,因此难以排除故障。 有人可以解释并帮我修改我的代码吗?

这是我的代码:

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':{'':'','业余建造':'是',&# 39;制作':' KENNETH A BERGER','位置':'''电气城,西澳大利亚''总计未受伤的':'','纬度':'', '事件ID' 20140524X21540','机场名称':' N / A','飞机类别': '未知','调查类型':'事故','报告状态':'初步',' ;活动日期':' 05/24/2014','总致命伤害':' 1','国家':& #39;美国','天气状况'' VMC','注册号码':' N249PW',' ;事故编号':' WPR14FA209','发动机数量''','经度':'& #39;,' Air Carrier''',' Total Serious Injuries':'',' Airport Code&# 39;:'','型号':' SEAREY LSX','广泛的飞行阶段':'''' ;,'出版日期':' 05/29/2014',' FAR说明':'第91部分:通用航空',&# 39 ;引擎类型':'','安排':'','飞行目的':'个人& #39;,'飞机损坏'实质性','伤害严重性':'致命(1)','轻微伤害':'},' 20140529X73728':{'':'','业余内置'''制作':' ROBINSON HELICOPTER COMPANY','位置':''''' ; Chugiak,AK"',' Total Uninjured':'',' Latitude':' 61.417778', '事件ID' 20140529X73728','机场名称':'','飞机类别':&# 39;直升机','调查类型''事故','报告状态':'初步'事件'事件日期':' 05/28/2014','总致命伤害':' 1','国家':&#39 ;美国','天气状况' VMC','注册号码':' N392GP','意外数字':' ANC14FA030','发动机数量':' 1','经度':' -149.500833& #39;,' Air Carrier''',' Total Serious Injuries':'',' Airport Code&# 39;:'','模型':' R44 II','广泛的飞行阶段':'''' ;,'出版日期':' 05/30/2014',' FAR说明':'第133部分:Rotorcraft Ext。加载','引擎类型':'往复','安排':'','飞行的目的&# 39;:'外部负荷'飞机损坏''被摧毁','伤害严重程度':'致命(1) ','轻微伤害':'},' 20140320X40839':{'':'& #39;,'业余建造'否','制作':' CESSNA','位置': '"弗吉尼亚州夏洛茨维尔"',' Total Uninjured':' 1',' Latitude':' 38.139722', '事件ID':#201; 20140320X40839','机场名称':' CHARLOTTESVILLE-ALBEMARLE','飞机类别': '飞机','调查类型''事故','报告状态':'可能的原因',&# 39;活动日期':' 03/08 / 2014','总致命伤害':'','国家': '美国','天气状况' VMC','注册号码':' N5423J',&# 39;事故编号':' ERA14CA160','发动机数量' 1''经度':' -78.452222',' Air Carrier''',' Total Serious Injuries':'','机场代码':' CHO''型号':' 172N','广泛的飞行阶段'登陆和'登陆& #39;,'发布日期':' 05/05 / 2014',' FAR Descrip ':'第91部分:通用航空','引擎类型':'往复','计划':' ','飞行目的'个人','飞机损坏''实质性'伤害严重程度& #39;:'非致命','总轻伤?''}}

2 个答案:

答案 0 :(得分:1)

首先,不要使用像dict这样的对象名作为变量。由于您正在尝试call变量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()

答案 1 :(得分:1)

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