2016-09-29 2 views
-2

Ich muss eine Liste von Wörterbüchern Schleife und prüfen, ob ein Wert vorhanden sind. Wenn es existiert, nehme ich einen anderen Wert aus demselben Wörterbuch und speichere es in einem neuen Wörterbuch in einer anderen Liste. Was ich habe ist dasPython: Schleife durch eine Liste von Wörterbüchern und Extrahieren von Werten in ein neues Wörterbuch

class_copy=[] 
for root, dirs, files in os.walk(files_path+"/TD"): 
    for file in files: 
     file_name=os.path.splitext(file)[0] 
     for d in data_list: 
      if d['id'] == file_name: 
       cc['class']=d['fic'] 
       class_copy.append(cc) 
       break 

Also ich durchschleifen einige Dateien. data_list ist eine Liste von Wörterbüchern. Diese Wörterbücher haben jeweils eine 'ID', die mit einem Dateinamen übereinstimmt. Wenn also das Wörterbuch 'd' mit dem Wert 'id' gefunden wird, nehme ich den Wert von 'fic' für Wörterbuch 'd' und mache ein neues Wörterbuch mit dem Schlüssel ' Klasse ', um den Wert von' fic 'zu speichern. Dann speichere ich dieses Wörterbuch in einer neuen Liste von Wörterbüchern namens class_copy.

Das Problem ist, dass nach dem Durchlaufen aller, alle Wörterbücher in class_copy die gleichen sind. Ich nehme an, dass durch das Schleifen und Ändern der Instanz von d sich die Werte von class_copy ebenfalls ändern, aber wie kann ich die Werte beibehalten? Gibt es einen besseren Weg, dies zu tun?

+1

Glauben Sie nicht, dass vielleicht wäre es gut, uns zu zeigen, wie Sie 'class_copy' und die Objekte darin initialisiert, so dass wir Ihnen sagen, dass Sie mehrere Verweise auf das gleiche Wörterbuch haben? – TigerhawkT3

+0

@ TigerhawkT3 Ich habe hinzugefügt, wie ich class_copy als leere Liste – Atirag

Antwort

3

Du eigentlich keinen neuen Wörterbuch erstellen, aktualisieren Sie ein vorhandenes:

cc['class']=d['fic'] 

einfach aktualisiert die mit dem Schlüssel 'class' zugehörige Wert. Ändern Sie Ihren Code wie folgt:

, die eine neue Instanz eines Wörterbuchs erstellen wird.

Der Grund, dass alle Einträge in Ihrer Liste gleich sind, ist, weil jedes Element in der Liste das selbe Wörterbuch ist. Wenn Sie wie gezeigt ein neues Wörterbuch erstellen, haben Sie unabhängige Instanzen in der Liste, wie Sie es erwartet haben.

+0

natürlich initialisieren. Hat super funktioniert. Vielen Dank! – Atirag

0
class_copy.append({'class': d['fic']'}) 
+0

nicht sehr nützlich ohne Erklärung –

Verwandte Themen