我有包含像這樣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