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



我有一个庞大的字典列表,每个列表中除了名称之外都有不同的键。每个集合中都存在密钥名称,但其他密钥不同。例如:

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,以便每个唯一键都有列标题。在这种情况下,我会有以下列:

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

我想要的是按列添加项目,如下所示:

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进行分组,然后获得每列的第一个非null值。

要保存到csv,您应该执行以下操作:

df.to_csv('file_name.csv')

最新更新