2

我在将字典列表操作成更易于消化的内容以写入 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_example = [{'id':1,'stage':'stage1','key2':'value1'},{'id':1,'stage':'stage2','key2':'value2'}]
4

1 回答 1

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

...ETC

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

于 2013-10-16T23:21:03.663 回答