2017-03-24 1 views
0

Ich verschmelzenden 4-Dateien zu löschen, die dieses Skript Milliarden von Datensätzen hat, ist nur ein Beispiel dafür, was ichWie ein Dictionay nach der Verarbeitung in Python

In diesem Skript im wollen Hinzufügen von Datensätzen in vier Wörterbücher und atlast versuchen im Zusammenführung dieser 4 Wörterbücher einem dictionar

ich versuche, 2. Wörterbuch zu löschen, nachdem sie verarbeitet zu werden (nachdem sie in einem letzten Wörterbuch getan verschmilzt), aber es wirft einige Fehler

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() 

Fehler:

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' 

Ich möchte jedes Wörterbuch zu löschen, nachdem es ot anderes Verarbeiten es wirft Memory (da die Daten groß ist)

Wie dieses Problem zu lösen?

Hinweis: Die ganze Idee ist es, jedes Wörterbuch zu löschen, nachdem verschmelzenden es

Antwort

2

Ihre for Schleife del self.hash_2 während der ersten Iteration läuft (nach self.hash_2 Prüfung), so wird es, wenn die zweite Iteration beginnt verschwunden sein.

0

Wenn ich Ihre Frage anders formulieren können, was Sie wollen, ist ein Wörterbuch final_hash mit „ramu“ und „se“ als Schlüssel und zwei entsprechende Wert-Arrays, die alle Werte von ramu und se aus hash_1, hash_2, hash_3 und hash_4 , Recht? Hier ist, wie ich es tun würde:

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'] ]

Ich habe gerade die process() -Funktion hart codiert. Wenn Sie viele andere Wörterbücher haben, die zusammengeführt werden müssen, sollten Sie in Betracht ziehen, diesen Teil zu automatisieren.

Verwandte Themen