开发者

Converting a dict of dicts into a spreadsheet

My data is a dict of dicts like this (but with a lot more fields and names):

{'Jac开发者_如何学Ck': {'age': 15, 'location': 'UK'}, 
 'Jill': {'age': 23, 'location': 'US'}}

I want to export it to a spreadsheet like this:

Name  Age  Location
Jack  15   UK
Jill  23   US

But apparently csv.DictWriter wants to see a list of dicts like this:

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

What's the simplest way to get my dict of dicts into a CSV file?

I suppose the entries should be in alphabetical name order, too, but that's easy enough to do in the spreadsheet software.


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)

And datalist will hold the desired result. Notes:

  • This also modifies mydict (adding the 'name' key to each datum). You probably don't mind about that. It's a bit more efficient than the alternative (copying).
  • It's not the most flashy one-line-way-to-do-it, but it's very readable, which IMHO is more important


You can use list-comprehension to get your new list of 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'}]

EDIT: d is your dict:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜