dictionary-eintrag erweitern?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
kaineanung
User
Beiträge: 145
Registriert: Sonntag 5. April 2015, 20:57

Hallo Leute,

ich brauch mal wieder professionelle Hilfe. Also eure Hilfe...

Ich habe ein Dict mit vielen Keys. Das Value besteht dann wiederrum aus einem weiteren dictionary.
So, jetzt durchlaufe ich mein Dictionary und muss, bei bestimmten Voraussetzungen, ein Value hinzufügen.
Wenn ich aber ein update auf das dictionary mache, wird das sämtliche Value durch den neuen Value ersetzt. Ich möchte aber das das neue Value lediglich dem alten hinzugefügt wird, also erweitert wird.

Wie kann ich das machen? Wie kann ich einem (Subelement-) Dictionary ein weiteres Value hinzufügen?

Hier ein Beispiel:

Code: Alles auswählen

#mein Dictionary wobei das cnt_line ein Schleifenzühler darstellt
dictHosts.update({cnt_line : { 'host' : hostname, 'ip' : ipaddr }})
So, im weiteren Verlauf dieses Programmes ermittle ich den RR-Wert des dazugehörigen Hosts in einer DNS-Zugehörigkeitstabelle.
Wenn vorhanden, möchte ich diesen als 'rr'-Wert dem o.g. Dictionary hinzufügen.

Mein Ziel ist es das das Dict so aussieht:

Code: Alles auswählen

{cnt_line : { 'host' : hostname, 'ip' : ipadress, 'rr' : RRWert }}
Wenn ich ein update auf das Dictionary mache

Code: Alles auswählen

dictHost.update({entsp_key : {'rr' : RRWert}}
Dann wird das ursprüngliche überschrieben. Ich bekomme also ein Dict-Elemenet das auch tatsächlich so ausssieht:

Code: Alles auswählen

{entsp_key : {'rr' : RRWert}

#statt

{cnt_line : { 'host' : hostname, 'ip' : ipadress, 'rr' : RRWert }}
So, ich hoffe es verständlich beschrieben zu haben.

Wie kann ich das bewerkstelligen damit ich den rr-Wert in das bereits vorhandene Dict-Element hinzufügen kann statt es zu überschrieben?
BlackJack

@kaineanung: Erst mal ist `update()` der falsche Weg um *einen* Wert *einem* Schlüssel zuzuordnen. Da wird nur unnötig ein weiteres Wörterbuch erzeugt damit man die Methode aufrufen kann. Statt ``d.update({k: v})`` schreibt man einfacher und direkter ``d[k] = v``. Und wenn die Werte selber wieder Wörterbücher sind und Du da bei einem Wert ein Schlüssel/Wert-Paar ändern oder hinzufügen möchtest, dann musst Du halt erst dieses Wörterbuch aus ermitteln und dann dort die Änderungen vornehmen. Also ``d[k1][k2] = v``.
kaineanung
User
Beiträge: 145
Registriert: Sonntag 5. April 2015, 20:57

@BlackJack

Ich habe 2 Monate lang nicht mehr programmiert und das reicht bei mir schon um ein paar Sachen zu vergessen...
Ich erinnere mich wieder das ich das Problem so schonmal hatte und auch zu der Information kam es so zu machen wie du es gerade vorschlägst. Wahrscheinlich hattest du mir das vor geraumer Zeit auch gesagt gehabt.

Vielen Dank!
Antworten