我正在合并4个拥有数十亿条记录的文件,这个脚本只是我想要的一个例子
在这个脚本中,我试图将记录添加到四个词典中,并将这四个词典合并为一个词典
我试图在第二个字典被处理后删除(在合并完成一个最终字典之后),但是它会抛出一些错误
class project(object):
def one(self):
self.hash_1 = {}
self.hash_1["ramu"] = ["10","20"]
self.hash_1["se"] = ["1","2"]
def two(self):
self.hash_2 = {}
self.hash_2["ramu"] = ["0","2"]
self.hash_2["se"] = ["111","2w"]
def three(self):
self.hash_3 = {}
self.hash_3["ramu"] = ["44","22"]
self.hash_3["se"] = ["111121","25"]
def four(self):
self.hash_4 = {}
self.hash_4["ramu"] = ["4433","222"]
self.hash_4["se"] = ["16621","2532"]
def process(self):
self.final_hash = {}
for k in self.hash_1:
self.final_hash[k] = self.hash_1[k]
print k
if k in self.hash_2:
print self.hash_2[k]
else:
print "no"
del self.hash_2
if k in self.hash_3:
print self.hash_3[k]
else:
print "no"
del self.hash_3
if k in self.hash_4:
print self.hash_4[k]
else:
print "no"
del self.hash_4
print self.final_hash
e_obj = project()
e_obj.one()
e_obj.two()
e_obj.three()
e_obj.four()
e_obj.process()
错误:
e_obj.process()
File "hash_remove_test.py", line 31, in process
if k in self.hash_2:
AttributeError: 'project' object has no attribute 'hash_2'
我想在处理之后删除每个字典,否则它会抛出memoryError(因为数据很大)
如何解决这个问题?
注意:整个想法是在合并后删除每个字典
答案 0 :(得分:2)
您的for
循环在第一次迭代期间(在检查del self.hash_2
之后)运行self.hash_2
,因此在第二次迭代开始时它将消失。
答案 1 :(得分:0)
如果我可以改写你的问题,你想要的是一个字典final_hash,其中“ramu”和“se”作为键和两个相应的值数组,它们具有来自hash_1,hash_2,hash_3和hash_4的所有ramu和se值,对?我就是这样做的:
def process(self):
final_hash = dict()
for key in self.hash_1:
if key not in final_hash:
final_hash[key]= []
final_hash[key].append(self.hash_1[key])
for key in self.hash_2:
final_hash[key].append(self.hash_2[key])
for key in self.hash_3:
final_hash[key].append(self.hash_3[key])
for key in self.hash_4:
final_hash[key].append(self.hash_4[key])
del(self.hash_1)
del(self.hash_2)
del(self.hash_3)
del(self.hash_4)
print final_hash["ramu"], final_hash["se"]
[['10','20'],['0','2'],['44','22'],['4433','222']]
[['1','2'],['111','2w'],['111121','25'],['16621','2532']]
我刚刚对process()函数进行了硬编码。如果您有许多其他字典必须合并在一起,您可能需要考虑自动化该部分。