如何将多个嵌套字典中的数据以表格格式写入.csv或.txt文件?

时间:2016-06-28 05:34:49

标签: python python-2.7 csv dictionary

我写了一个脚本来读取文件中的数据并将它们存储在3个词典中。

例如,

d1 = {'Ben': {'Skill': 'true', 'Magic': 'false'}, 'Tom': {'Skill': 'true', 'Magic': 'true'}}
d2 = {'Ben': {'Strength': 'wo_mana', 'Int': 'wi_mana', 'Speed': 'wo_mana'}, 'Tom': {'Int': 'wi_mana', 'Agility': 'wo_mana'}}
d3 = {'Ben': {'Strength': '1.10', 'Int': '1.20', 'Speed': '1.50'}, 'Tom': {'Int': '1.40', 'Agility': '1.60'}}

然后,我希望以表格格式将数据写入.csv或.txt文件,这样当我用Excel打开输出文件时,它有5列和4行,如下所示:

Name Skill Magic wo_mana          wi_mana
Ben  true  false Strength = 1.10  Int = 1.20
                 Speed = 1.50
Tom  true  true  Agility = 1.60   Int = 1.40

Ben或Tom数据是否排在第一位并不重要。

鉴于我知道我希望我的标题看起来如何,这是我到目前为止所尝试的:

import csv, itertools

header = ['Name', 'Skill', 'Magic', 'wo_mana', 'wi_mana']

with open('output.csv', 'w') as f:
    w = csv.DictWriter(f, header)
    w.writeheader()
    for key, val in sorted(d1.items()):
        row = {'Name': key}
        row.update(val)
        w.writerow(row)

我的输出是:

Name,Skill,Magic,wo_mana,wi_mana
Ben,true,false,,
Tom,true,true,,

对于前3列是正确的。

现在,我不知道如何编写wo_manawi_mana列的数据,因为:

a)Speed = 1.50Strength = 1.10必须位于第三行,因为它们属于Ben,因此wo_mana列下会有两行Ben 1}},我应该合并d2d3这样

d23 = {'Ben': {'wo_mana': 'Strength = 1.10', 'wo_mana': 'Speed = 1.50', 'wi_mana': 'Int = 1.20'}, 'Tom': {'wo_mana': 'Agility = 1.60', 'wi_mana': 'Int = 1.40'}}

b)我不知道如何逐行打印所有数据(首先打印Ben的所有数据,然后打印Tom,反之亦然),因为wo_manawi_mana数据是与SkillMagic

不在同一个字典中

在将这些词典直接写入输出文件之前,我是否应首先对3个词典进行一些更改?我该怎么做才能达到我想要的输出?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

  1. 在csv中为记录设置多行是没有意义的,因此将这两行添加到一行。例如:Strength = 1.10; Speed = 1.50
  2. 首先将结果存储在列表中,然后使用;(或,以外的任何其他字符)加入列表

    1. 由于您要解析多个词典,请逐个解析它们并将它们添加到单个列表中,以便按行顺序获取所有词典。