36 Stimmen

Verschmelzen von Listen von Werten eines Wörterbuchs in Python

Ich versuche, drei Wörterbücher zusammenzuführen, die alle dieselben Schlüssel haben und entweder Listen von Werten oder einzelne Werte enthalten.

one={'a': [1, 2], 'c': [5, 6], 'b': [3, 4]}
two={'a': [2.4, 3.4], 'c': [5.6, 7.6], 'b': [3.5, 4.5]}
three={'a': 1.2, 'c': 3.4, 'b': 2.3}

Was ich brauche, ist, dass alle Elemente in den Werten zu einer Liste hinzugefügt werden.

result={'a': [1, 2, 2.4, 3.4, 1.2], 'c': [5, 6, 5.6, 7.6, 3.4], 'b': [3, 4, 3.5, 4.5, 2.3]}

Ich habe mehrere Dinge ausprobiert, aber die meisten fügen die Werte in verschachtelte Listen ein. Zum Beispiel:

out=dict((k, [one[k], two.get(k), three.get(k)]) for k in one)
{'a': [[1, 2], [2.4, 3.4], 1.2], 'c': [[5, 6], [5.6, 7.6], 3.4], 'b': [[3, 4], [3.5, 4.5], 2.3]}

Ich habe versucht, es zu aktualisieren, indem ich durch die Werte iteriert habe:

out.update((k, [x for x in v]) for k,v in out.iteritems())

aber das Ergebnis war genau das gleiche. Ich habe versucht, einfach die Listen hinzuzufügen, aber weil das dritte Wörterbuch nur einen Float-Wert hat, konnte ich es nicht tun.

check=dict((k, [one[k]+two[k]+three[k]]) for k in one)

Also versuchte ich zuerst die Listen in den Werten von one und two zu addieren und dann den Wert von three anzuhängen. Das Hinzufügen der Listen hat gut funktioniert, aber dann, als ich versuchte, den Float-Wert aus dem dritten Wörterbuch anzuhängen, ging plötzlich der gesamte Wert zu 'None'

check=dict((k, [one[k]+two[k]]) for k in one)
{'a': [[1, 2, 2.4, 3.4]], 'c': [[5, 6, 5.6, 7.6]], 'b': [[3, 4, 3.5, 4.5]]}
new=dict((k, v.append(three[k])) for k,v in check.items())
{'a': None, 'c': None, 'b': None}

0voto

HBasiri Punkte 363

Sehen Sie diese Hilfe oder nicht:

>>> dic={}
>>> k=[]
>>> for i in 'abc':
    k=one[i]+two[i]
    k.append(three[i])
    dic[i]=k

>>> dic
{'c': [5, 6, 5.6, 7.6, 3.4], 'a': [1, 2, 2.4, 3.4, 1.2], 'b': [3, 4, 3.5, 4.5, 2.3]}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X