如何在python中处理它后删除一个字典

时间:2017-03-24 08:51:58

标签: python dictionary

我正在合并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(因为数据很大)

如何解决这个问题?

注意:整个想法是在合并后删除每个字典

2 个答案:

答案 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()函数进行了硬编码。如果您有许多其他字典必须合并在一起,您可能需要考虑自动化该部分。