【问题标题】:Selecting Certain Keys,Values From List of Python Dictionaries to CSV从 Python 字典列表中选择某些键、值到 CSV
【发布时间】:2026-01-09 20:00:01
【问题描述】:

我在将字典列表处理成更易于理解的内容以写入 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'}]

【问题讨论】:

  • 那么,如果有另一个 dict... 你会再次拥有 key1,key2 吗?看起来不是很实用的格式...
  • 谢谢,看来我确实需要重新考虑我的存储方式。我遇到的问题是我在不同点对数据进行快照。我会更新更多信息。

标签: python csv dictionary


【解决方案1】:

您可以使用 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。我仍然不确定它是否是一个非常有用的输出。您可能需要首先考虑重新组织您存储数据的方式。

【讨论】: