如何将具有不同键的字典列表保存为同一行中的 csv?

How to save list of dictionaries with different keys as csv in the same row?

我有这个庞大的字典列表,每个列表中除了名称外都包含不同的键。每个 collection 中都存在键名,但其他键不同。例如:

items = [{
    'name': 'A', 
    'P1 v P2': 0.2
}, {
    'name': 'B', 
    'P1 v P2': 0.3
}, {
    'name': 'C', 
    'P1 v P2': 0.3
}, {
    'name': 'D', 
    'P1 v P2': 0.3
}, {
    'name': 'E', 
    'P1 v P2': 0.3
}, {
    'name': 'A', 
    'P2 v P3': 0.04
}, {
    'name': 'B', 
    'P2 v P3': 0.9
}, {
    'name': 'C', 
    'P2 v P3': 0.2
}, {
    'name': 'D', 
    'P2 v P3': 0.3
}, {
    'name': 'E', 
    'P2 v P3': 0.5
}, {
    'name': 'A', 
    'P1 v P4': 0.3
}, {
    'name': 'B', 
    'P1 v P4': 0.3
}, {
    'name': 'C', 
    'P1 v P4': 0.3
}, {
    'name': 'D', 
    'P1 v P4': 0.3
}, {
    'name': 'E', 
    'P1 v P4': 0.3
}]

现在,我需要将其转换为 CSV,以便每个唯一键都有 headers 列。在这种情况下,我会有以下列:

name, P1 v P2, P1 v P4, P2 v P3

所以,我做了以下事情:

from collections import ChainMap

items_dict = dict(ChainMap(*items))
headers = items_dict.keys()

with open(filename, 'w', encoding='utf8', newline='')  as score_table:
            csv_writer = csv.DictWriter(score_table, headers)
            csv_writer.writeheader()
            csv_writer.writerows(items)

但它没有给我想要的结果。我得到这样的东西:

name, P1 v P2, P1 v P4, P2 v P3
A, 0.2
B, 0.3
C, 0.3
D, 0.3
E, 0.3
A, ,0.3
B, ,0.3
C, ,0.3
D, ,0.3
E, ,0.3
A, , ,0.9
B, , ,0.2
C, , ,0.3
D, , ,0.5
E, , ,0.9

我想要的是像下面这样附加 column-wise 项目:

name, P1 v P2, P1 v P4, P2 v P3
A, 0.2,0.3,0.9
B, 0.3,0.3,0.2
C, 0.3,0.3,0.3
D, 0.3,0.3,0.5
E, 0.3,0.3,0.9

但我不知道如何得到这个。我一直在尝试几种不同的方法,但没有得到预期的结果。我什至尝试将其转换为 pandas 数据帧以查看它是否有效,但也没有成功。

这应该可以解决您的问题:

df = pd.DataFrame(items).groupby("name").first()

它按 name 分组,然后为每列获取第一个非空值。

要保存为 csv,您应该这样做:

df.to_csv('file_name.csv')