【问题标题】:Converting a dict of dicts into a spreadsheet将字典的字典转换为电子表格
【发布时间】:2011-04-23 14:45:25
【问题描述】:

我的数据是这样的字典(但有更多的字段和名称):

{'Jack': {'age': 15, 'location': 'UK'}, 
 'Jill': {'age': 23, 'location': 'US'}}

我想将它导出到这样的电子表格中:

Name  Age  Location
Jack  15   UK
Jill  23   US

但显然 csv.DictWriter 希望看到这样的字典列表:

[{'name': 'Jack', 'age': 15, 'location': 'UK'},
 {'name': 'Jill', 'age': 23, 'location': 'US'}]

将我的 dicts 放入 CSV 文件的最简单方法是什么?

我想条目也应该按名称的字母顺序排列,但这在电子表格软件中很容易做到。

【问题讨论】:

    标签: python csv dictionary


    【解决方案1】:
    mydict = {'Jack': {'age': 15, 'location': 'UK'}, 
              'Jill': {'age': 23, 'location': 'US'}}
    
    datalist = []
    
    for name in mydict:
      data = mydict[name]
      data['name'] = name
      datalist.append(data)
    

    datalist 将保留所需的结果。备注:

    • 这也修改了mydict(将“名称”键添加到每个数据)。你可能不介意这一点。它比替代方法(复制)更有效。
    • 这不是最华丽的单行方式,但它的可读性很强,恕我直言,这更重要

    【讨论】:

    • 字母只是for name in sorted(mydict)
    【解决方案2】:

    您可以使用 list-comprehension 来获取新的 dicts 列表:

    >>> [dict(zip(['name'] + attrs.keys(), [name] + attrs.values())) \  
        for name, attrs in d.iteritems()]
    [{'age': 23, 'location': 'US', 'name': 'Jill'},
     {'age': 15, 'location': 'UK', 'name': 'Jack'}]
    

    编辑:d 是你的字典:

    >>> d
     {'Jack': {'age': 15, 'location': 'UK'}, 'Jill': {'age': 23, 'location': 'US'}}
    

    【讨论】:

    • 这比另一个例子更不容易理解。但它更快吗?
    猜你喜欢
    • 1970-01-01
    • 2011-06-12
    • 2018-08-21
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多