[英]From Nested Dictionary to CSV File
我有嵌套字典(长度> 70.000):
users_item = {
"sessionId1": {
"12345645647": 1.0,
"9798654": 5.0
},
"sessionId2":{
"3445657657": 1.0
},
"sessionId3": {
"87967976": 5.0,
"35325626436": 1.0,
"126789435": 1.0,
"72139856": 5.0
},
"sessionId4": {
"4582317": 1.0
}
......
}
我想从我的嵌套字典创建CSV文件,我的结果将如下所示:
sessionId1 item rating
sessionId1 item rating
sessionId2 item rating
sessionId3 item rating
sessionId3 item rating
sessionId3 item rating
sessionId3 item rating
.......
我发现这篇文章: 将嵌套字典转换为CSV表
这与我的问题类似,但是当我尝试所有答案时,它不起作用, pandas库耗尽内存
如何用我的数据制作CSV文件?
只需遍历字典并使用Python csv编写器写入csv文件。
with open('output.csv', 'w') as csv_file:
csvwriter = csv.writer(csv_file, delimiter='\t')
for session in users_item:
for item in users_item[session]:
csvwriter.writerow([session, item, users_item[session][item]])
for session, ratings in users_item.items():
for rating, value in ratings.items():
print("{} {}".format(session, value))
输出:
sessionId3 5.0
sessionId3 1.0
sessionId3 5.0
sessionId3 1.0
sessionId1 5.0
sessionId1 1.0
sessionId4 1.0
sessionId2 1.0
请注意 , dict
( user_items
) 没有订单 。 因此,除非您使用其他方式指定行的顺序,否则输出将按照dict
内部使用的顺序排列。
编辑:这种方法对包含70k条目的文件没有问题。
编辑:如果要写入CSV文件,请使用csv
模块或仅将输出通过管道传输到文件。
假设您希望每个会话都是一行,每行的列数将是所有会话序列中唯一键的总数。 根据您提供的数据,我猜测唯一键的数量是天文数字。
这就是为什么你在本讨论中给出的解决方案遇到了内存问题。 一次只能存储在内存中的数据太多了。
如果我的假设是正确的,你唯一的选择是分而治之。 将数据分成更小的块并将它们写入csv格式的文件中。 然后在最后合并csv文件。
如果您迭代地写入文件,应该没有内存问题:
import csv
users_item = {
"sessionId1": {
"12345645647": 1.0,
"9798654": 5.0
},
"sessionId2":{
"3445657657": 1.0
},
"sessionId3": {
"87967976": 5.0,
"35325626436": 1.0,
"126789435": 1.0,
"72139856": 5.0
},
"sessionId4": {
"4582317": 1.0
}
}
with open('nested_dict.csv', 'w') as output:
writer = csv.writer(output, delimiter='\t')
for sessionId in sorted(users_item):
ratings = users_item[sessionId]
for item in ratings:
writer.writerow([sessionId, item, ratings[item]])
结果输出文件的内容(其中»
表示制表符):
sessionId1» 12345645647» 1.0
sessionId1» 9798654» 5.0
sessionId2» 3445657657» 1.0
sessionId3» 126789435» 1.0
sessionId3» 87967976» 5.0
sessionId3» 35325626436» 1.0
sessionId3» 72139856» 5.0
sessionId4» 4582317» 1.0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.