从Python词典列表中选择某些键,值到CSV

时间:2013-10-16 22:58:59

标签: python csv dictionary

我有一个问题,即将字典列表操作为更易于理解的内容,以便写入csv。例如,我有一个像这样的词典列表:

dict_example = [{'id':1,'key1':'value1','key2':'value2'},{'id':1,'key1':'value3','key2':'value4'}]

理想情况下,我想要一个csv,这将是:

id,key1,key2,key1,key2
1,value1,value2,value3,value4

基本上,我想找出最简单的方法。我正在使用的这个列表要大得多。另外,对于每个'id',有4个字典代表不同的值,我希望每个'id'都在一行中。

有什么想法?我可以想办法通过将值提取到其他形式来实现这一点,但不要将它们留在字典中然后将其写入CSV。

编辑:

我现在需要弄清楚哪种数据格式最有用。对于每个'id',存在不同的'阶段',其中'key1'和'key2'的值是不同的。该ID是持久的。

什么是有用的dict来存储它?

现在存在的示例,更清晰:

dict = dict_example = [{'id':1,'stage':'stage1','key2':'value1'},{'id':1,'stage':'stage2','key2':'value2'}]

1 个答案:

答案 0 :(得分:0)

您可以使用itertools.groupby按特定条件进行分组 - 在您的情况下,'id'

import itertools

d = [{'id':1,'key1':'value1','key2':'value2'},{'id':1,'key1':'value3','key2':'value4'}, \
        {'id':1,'key4':'value5'}, {'id':2,'key1':'value3','key2':'value4'}]

for id, group in itertools.groupby(d, lambda x : x['id']):
    key_line = 'id'
    values_line = str(id)
    for g in group:
        for key in sorted(g.keys()):
            if key == 'id':
                continue
            key_line += ',{0}'.format(key)
            values_line += ',{0}'.format(g[key])

    print key_line
    print values_line

这将输出

id,key1,key2,key1,key2,key4
1,value1,value2,value3,value4,value5
id,key1,key2
2,value3,value4

...等

表示词典中的每个ID。我仍然不确定它是否是一个非常有用的输出。您可能需要考虑重新组织首先存储数据的方式。