Diese Aufgabe ein wenig einfacher wäre, wenn wir in lst
verwendet, um eine Liste mit allen Buchstaben-Tasten hatte, aber es ist einfach genug, um sie zu extrahieren.
Meine Strategie besteht darin, die Unterlisten in Wörterbücher zu konvertieren. Das macht es einfach & effizient, den Wert zu nehmen, der mit jedem Schlüssel verbunden ist. Und die dict.get
Methode ermöglicht es uns, einen Standardwert für fehlende Schlüssel anzugeben.
lst = [[['a', 100],['b', 200],['d', 325]],[['a', 50],['b', 250],['c', 75]]]
# Convert outer sublists to dictionaries
dicts = [*map(dict, lst)]
# Get all the keys
keys = set()
for d in dicts:
keys.update(d.keys())
# Get data for each key from each dict, using 0 if a key is missing
final = [[k] + [d.get(k, 0) for d in dicts] for k in sorted(keys)]
print(final)
Ausgang
[['a', 100, 50], ['b', 200, 250], ['c', 0, 75], ['d', 325, 0]]
Wenn wir
lst = [[['a', 100],['b', 200],['d', 325]],[['a', 50],['b', 250],['c', 75]], [['a', 22], ['b', 10]]]
verwenden dann die Ausgabe
[['a', 100, 50, 22], ['b', 200, 250, 10], ['c', 0, 75, 0], ['d', 325, 0, 0]]
Wenn Sie dies auf Python 2 ausführen möchten, müssen Sie den Code, der die äußeren Unterlisten in Wörterbücher konvertiert, geringfügig ändern. Ändern Sie ihn auf
dicts = list(map(dict, lst))
das funktioniert richtig auf beiden Python 2 & 3. Und wenn Sie ausführen müssen, um es auf Python 2, geben Sie einfach
tun konnte
dicts = map(dict, lst)
seit map
in Python 2 zurück eine Liste, kein Iterator.
warum einige Elemente null wie '['c', 0,75]' enthalten sollten? – RomanPerekhrest
Wird 'lst' immer diese Struktur haben? IOW, wird es immer eine Liste von (Listen von (zwei Artikellisten)) sein? –
@RomanPerekrest Es würde erscheinen, weil die erste Unterliste keinen "c" Schlüssel enthält, so dass das OP es standardmäßig auf 0 – Wondercricket