【问题标题】:How do I write a csv file from a dictionary with multiple values per key?如何从每个键具有多个值的字典中编写 csv 文件?
【发布时间】:2015-07-25 07:40:46
【问题描述】:

我最初将此问题作为另一个问题的一部分发布。我需要编写一个 csv 文件,其中提供了技术人员的姓名、他们在一张单张上工作的日期以及该日期的单张数量。我已经找到了一种将所需数据放入字典的方法,其中键是技术人员的姓名,值是日期和计数,使用光标浏览 ArcMap 以查找数据,使用如下代码:

desc = arcpy.Describe(inLayer)
fields =  desc.fields
for field in fields:
    for srow in cursor:
        tech = srow.getValue("Technician")
        ModDate = srow.getValue("ModifiedDate")
        FormDate = ModDate.strftime("%m-%d-%Y")
        if tech == "Elizabeth":
            EScontract = EScontract + 1
            ESList = []            
            ESList.append(FormDate)
            EStech.update(ESList)
            for date in EStech.iteritems():
                if tech in Listedtech:
                    Listedtech[tech].append(date)
                else:
                    Listedtech[tech] = [date]

其中 EStech 是前面定义的 Counter 字典,Listedtech 也是前面定义的空字典。

Listedtech 打印时看起来像:

Listedtech = {u'Elizabeth': [('05-11-2015', 6), ('05-13-2015', 16), ('05-12-2015', 16)] , u'Michael': [('05-11-2015', 3)]}

如何将名为 Listedtech 的字典转换为 csv 文件?

更新

我已经成功地将我的字典变成了一个名为 nl 的字典列表。当我打印我的字典列表时,我会得到如下信息:

nl = [{u'Elizabeth': [('05-11-2015', 6), ('05-13-2015', 16), ('05-12-2015', 16)]} , {u'Michael': [('05-11-2015', 3)]}]

但是,现在我仍然无法将其转换为 csv。当我使用 DictWriter 时,结果很奇怪,每个技术人员都有自己的列,但只有一行包含所有相关值,所以 csv 文件看起来像这样

伊丽莎白 |迈克尔
('05-11-2015', 6), ('05-13-2015', 16), ('05-12-2015', 16) | ('05-11-2015', 3)

而不是像我想要的那样,每个值都在不同的行上。我使用的代码是这样的:

with open(csvfilename, 'w') as f:
    fieldnames = ['Elizabeth', 'Michael']
    dict_writer = csv.DictWriter(f, fieldnames = fieldnames)
    dict_writer.writeheader()
    dict_writer.writerows(nl)

我做错了什么?

【问题讨论】:

  • csv 模块将是最好的起点...docs.python.org/2/library/csv.html
  • 您查看过csv 包了吗?
  • 我试图找出 csv.DictWriter 但我似乎无法让它打印任何东西。我不断收到不同的错误。

标签: python csv dictionary arcgis


【解决方案1】:

您可以使用csv.DictWriter。来自文档:

import csv

with open('names.csv', 'w') as csvfile:
    fieldnames = ['first_name', 'last_name']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

    writer.writeheader()
    writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'})
    writer.writerow({'first_name': 'Lovely', 'last_name': 'Spam'})
    writer.writerow({'first_name': 'Wonderful', 'last_name': 'Spam'})

【讨论】:

  • 我已经准备好文档,但我不确定如何让它为此工作?你如何使用它并让它查看已经形成的字典?
  • 啊,我明白了。您需要将它们分开。
  • 有没有办法做到这一点?这可以正常工作,但我不知道如何使它工作。
  • 您需要将列表字典转换为字典列表。我现在没时间回答,也许几个小时后。
  • this question了解如何。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-20
  • 1970-01-01
  • 1970-01-01
  • 2012-01-30
  • 2019-07-02
  • 1970-01-01
相关资源
最近更新 更多