将具有多个值的dict列表写入多个文件的Python脚本
我有一份清单,如下所示。我希望根据键将DICT写入多个excel或csv文件。如果密钥相同,则它们应位于一个文件中 我的遗嘱清单:将具有多个值的dict列表写入多个文件的Python脚本,python,pandas,csv,pandas-groupby,Python,Pandas,Csv,Pandas Groupby,我有一份清单,如下所示。我希望根据键将DICT写入多个excel或csv文件。如果密钥相同,则它们应位于一个文件中 我的遗嘱清单: [{'john': ['0', '100']}, {'john': ['4', '101']}, {'john': ['0', '102']}, {'mary': ['2', '100']}, {'mary': ['5', '101']}, {'mary': ['4', '102']}, {'mary': ['1', '103']}, {'sam': ['4', '
[{'john': ['0', '100']}, {'john': ['4', '101']}, {'john': ['0', '102']}, {'mary': ['2', '100']}, {'mary': ['5', '101']}, {'mary': ['4', '102']}, {'mary': ['1', '103']}, {'sam': ['4', '100']}, {'sam': ['3', '101']}, {'sam': ['12', '102']}, {'paul': ['2', '100']}, {'hay': ['2', '100']}, {'hay': ['1', '102']}, {'mercy': ['4', '101']}]
到目前为止,我的代码是:
x = []
i = 0
for ii, line in enumerate(my_list_of_dicts):
with open("out_%s.csv" % i, 'w+') as f:
if line.keys() not in x:
x.append(line.keys())
i += 1
pd.DataFrame.from_dict(data=line, orient='index').to_csv(f, header=False)
else:
pd.DataFrame.from_dict(data=line, orient='index').to_csv(f, header=False)
结果:
我得到的是所需数量的文件,但不是内容
期望:
我希望获得每个密钥对应的文件,即(约翰、玛丽、山姆、杰伊、保罗、海伊和梅西)以及以下内容。以约翰为例:
john, 0, 100
john, 4, 101
john, 0, 102
我不知道如何进行,甚至不知道是否需要列举。谢谢更好的方法是将数据聚合到单个数据帧中,然后迭代
groupby
对象:
# construct dataframe from list of dictionaries
df = pd.DataFrame([[k, *v] for dct in L for k, v in dct.items()])
df[[1, 2]] = df[[1, 2]].apply(pd.to_numeric)
# iterate groupby object and export to separate CSV files
for key, df_key in df.groupby(0):
df_key.to_csv(f'{key}.csv', index=False, header=False)
你的意思是在for循环中使用i而不是ii吗?不,这就是为什么我说我不确定使用enumerate是不是正确的想法,因为ii没有正常使用,如果你不打算使用那样的东西,你会使用的,好吧,现在我知道了。非常感谢。