python: union-Tasten aus mehreren Wörterbuch?
Habe ich 5 Wörterbücher, und ich will eine Gewerkschaft Ihre Schlüssel.
alldict = [dict1, dict2, dict3, dict4, dict5]
Versuchte ich
allkey = reduce(lambda x, y: set(x.keys()).union(y.keys()), alldict)
aber es gab mir ein Fehler
AttributeError: 'set' object has no attribute 'keys'
Mache ich es falsch ? Ich mit normalen forloop aber ich Frage mich, warum der obige code nicht funktioniert hat.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Lösung funktioniert für die ersten beiden Elemente in der Liste, aber dann
dict1
unddict2
habe reduziert in eine Reihe und setzen in Ihrem lambda alsx
. So, jetztx
nicht über die Methodekeys()
mehr.Die Lösung ist, x ein Satz von Anfang an durch die Initialisierung Reduktion mit einer leeren Menge (das passiert zu sein, das Neutrale element der union).
Probiere es mit einen Initialisierer:
Alternative ohne lambdas wäre:
allkey = reduce(set.union, (set(d.keys()) for d in alldict))
Ich denke, @chuck die Frage bereits beantwortet, warum es nicht funktioniert, aber ein einfacher Weg, dies zu tun wäre zu Bedenken, dass die
union
Methode können mehrere Argumente:tut, was Sie wollen, ohne irgendwelche loops oder lambdas.
Einfache Strategie für nicht-funktionelle Neuronen (Wortspiel beabsichtigt):
Können wir wandeln diesen code um eine viel sorter form mit set Verstehens:
Diese Einzeiler ist immer noch sehr gut lesbar im Vergleich mit der konventionellen for-Schleife.
Der Schlüssel zum umwandeln einer geschachtelten Schleife in einer Liste oder legen Sie mit der Verständigung zu schreiben, die innere Schleife (die wechselt man schneller in der nested-loop) als der Letzte index (d.h.
for key in dictio
).Nur noch einen Weg, 'Ursache, die was das Heu:
oder die etwas-mehr-geheimnisvolle
(Ich bin deprimiert, dass es keine built-in-Funktion entspricht
ist es?)
def f(a, b): return dict(a.items() + b.items())
Ich habe versucht, die Liste und es hat nicht funktioniert also nur darum, es sich hier für niemanden.