Schlüssel in einem Python-Wörterbuch einfügen oder aktualisieren

8

Ich habe ein Python-Wörterbuch dict1 mit mehr als 20.000 Schlüsseln und ich möchte update es mit einem anderen Wörterbuch dict2 . Die Wörterbücher sehen so aus:

%Vor%

Wenn ich

verwende %Vor%

Die Schlüssel von dict1 , die den Schlüsseln von dict2 ähnlich sind, werden mit Werten von dict2 überschrieben. Was ich will ist, wenn eine Taste bereits in dict1 vorhanden ist, dann sollte der Wert dieser Taste in dict2 an den Wert von dict1 angehängt werden. Also

%Vor%

sollte zu

führen %Vor%

Eine naive Methode besteht darin, die Schlüssel von dict2 für jeden Schlüssel von dict1 zu durchlaufen und Schlüssel einzufügen oder zu aktualisieren. Gibt es eine bessere Methode? Unterstützt Python eine eingebaute Datenstruktur, die diese Art von Funktionalität unterstützt?

    
lovesh 17.05.2012, 11:40
quelle

3 Antworten

9

Verwenden Sie defaultdict aus dem Sammlungsmodul.

%Vor%     
Burhan Khalid 17.05.2012, 11:55
quelle
1

Das ist eigentlich ziemlich einfach mit einem Diktatverständnis und itertools.groupby() :

%Vor%

Gibt uns:

%Vor%

Natürlich wird dadurch ein neues Diktat erstellt, aber wenn Sie brauchen, um das erste Diktat zu aktualisieren, können Sie das trivial machen, indem Sie es mit dem neuen aktualisieren. Wenn Ihre Werte bereits Listen sind, kann dies geringfügige Änderungen erfordern (aber ich nehme an, dass Sie das für die Operation getan haben, in diesem Fall besteht keine Notwendigkeit).

Wenn Sie Python 2.x verwenden, sollten Sie natürlich dict.viewitems() oder dict.iteritems() über dict.items() verwenden. Wenn Sie eine Version von Python vor dict comprehensions verwenden, können Sie stattdessen dict((key , value) for ...) verwenden.

    
Gareth Latty 17.05.2012 11:54
quelle
0

Eine andere Methode, ohne etwas zu importieren, nur mit dem regulären Python-Wörterbuch:

%Vor%

dict1.get(k,"") gibt den mit k verknüpften Wert zurück, falls vorhanden, oder andernfalls eine leere Zeichenfolge, und fügt dann den Inhalt von dict2 an.

    
Julien-L 07.04.2017 00:06
quelle

Tags und Links