我有包含像这样Python字典约为10大文件加入大型辞书:通过相同的密钥
dict1:
{
'PRO-HIS-MET': {
'A': ([1,2,3],[4,5,6],[7,8,9]),
'B': ([5,2],[6],[8,9]),
'C': ([3],[4],[7,8])},
'TRP-MET-GLN': {
'F': ([-5,-4,1123],[-7,-11,2],[-636,-405])}
}
dict2:
{
'PRO-HIS-MET': {
'J': ([-657], [7,-20,3], [-8,-85,15])}
'TRP-MET-GLN':{
'K': ([1,2,3],[4,50,6],[7,80,9]),
'L': ([5,20],[60,80],[8,9])}
}
它们基本上是字典的所有词典。每个文件的大小都在1 GB左右(以上只是数据的一个例子)。不管怎么说,我想要做的是加入了10个字典在一起:
final:
{
'PRO-HIS-MET': {
'A': ([1,2,3],[4,5,6],[7,8,9]),
'B': ([5,2],[6],[8,9]),
'C': ([3],[4],[7,8])
'J': ([-657], [7,-20,3], [-8,-85,15])},
'TRP-MET-GLN': {
'F': ([-5,-4,1123],[-7,-11,2],[-636,-405])
'K': ([1,2,3],[4,50,6],[7,80,9]),
'L': ([5,20],[60,80],[8,9])}
}
我曾尝试在小文件下面的代码,它工作正常:
import csv
import collections
d1 = {}
d2 = {}
final = collections.defaultdict(dict)
for key, val in csv.reader(open('filehere.txt')):
d1[key] = eval(val)
for key, val in csv.reader(open('filehere2.txt')):
d2[key] = eval(val)
for key in d1:
final[key].update(d1[key])
for key in d2:
final[key].update(d2[key])
out = csv.writer(open('out.txt', 'w'))
for k, v in final.items():
out.writerow([k, v])
但是,如果我尝试在我的1 GB文件我通过将d1和d2以及最终字典保留在内存中来快速耗尽内存。
我有几个想法:
- 有没有一种方法,我可以只加载从分段词典的按键,比较这些,如果同样的人在多个字典中找到需要综合利用价值?
而不是将字典合并成一个巨大的文件(这可能会给我未来的内存头痛),我怎么可以在合并数据后为许多单独的文件包含一个键的所有值?例如,对于上述数据,我只想有:
pro-his-met.txt: 'PRO-HIS-MET': { 'A': ([1,2,3],[4,5,6],[7,8,9]), 'B': ([5,2],[6],[8,9]), 'C': ([3],[4],[7,8]) 'J': ([-657], [7,-20,3], [-8,-85,15])} trp-met-gln.txt: 'TRP-MET-GLN': { 'F': ([-5,-4,1123],[-7,-11,2],[-636,-405]) 'K': ([1,2,3],[4,50,6],[7,80,9]), 'L': ([5,20],[60,80],[8,9])}
我没有太多的编程经验的生物学家(你可能已经猜到了上述数据代表了生物信息学的问题),所以任何帮助将不胜感激!
有没有你不是一个理由使用数据库系统?听起来你所拥有的是以这种方式操纵的大量数据。 – 2013-02-20 02:28:07
大部分原因是我对任何一种数据库都缺乏经验。你建议我用什么来将Python字典转换为数据库? – deckardk 2013-02-20 02:37:41
您使用'eval'的事实使得懒惰的解决方案变得相当困难。像@Voo所说的那样并使用数据库。 – nneonneo 2013-02-20 02:48:12