python中保存和读取超大数量级的字典的方法

python中保存和读取超大数量级的字典的方法

1. 背景

最近在自己尝试item2vec建立词向量方面的事情,那么训练好的词向量一般是保存在字典中。其中,item一般为一串数字或字符串,常保存为字典的key,而vectors 是一个多维向量,array或者list类型保存为字典的value。然而语料库巨大,生成的字典超级大,保存和读取使用并不方便,于是想解决这个问题。提出两个方法。

2. 方法1(针对小字典很好用)

## 读取和保存字典
# 保存
def SaveDict(dictionary,filename):
    f = open('{}.txt'.format(filename),'w')
    f.write(str(dictionary))
    f.close()

# 读取
def ReadDict(filename):
    f = open('{}.txt'.format(filename),'r')
    a = f.read()
    dictionary = eval(a)
    f.close()
    return dictionary

然而一旦数量巨大,这秒秒钟内存溢出啊。
可是如果不能直接读取的话,逐行读取并不是一个可靠的方法,因为每一行可能停在某key或value中,有同学提到可以用切分split,也不太靠谱啊,一是分不干净,二是分开之后还是字符串,处理起来不好搞。

3. 方法2 再大字典也不怕

忽然想到可以用pd.to_csv啊

import pandas as pd

dict_name  # 那个字典
keys = dict_name.keys()
values = dict_name.values()

df = pd.DataFrame({'KEYS':keys,'VALUES':values})
df.to_csv('./filename.csv',index=False)

有同学说,这样子有缺点,比方说我现在要储存的字典values是个列表或者字典,这样子读取csv后,这个values会变成str啊
这个也好办!

df = pd.read_csv('./filename.csv',sep=',')

# 把VALUES列用eval抓换就好了
df['VALUES'] = df.apply(lambda x: eval(x.VALUES),axis=1)

这样子,字典超级大也可以保存和读取了!

4. 参考

  1. 字典保存与读取
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值