Liste und erfassen, überprüfen, wenn das Einzelteil ist einzigartig

Ich bin versucht zu schreiben, eine Liste Verständnis statement, das nur ein Element hinzufügen, wenn Sie derzeit nicht in der Liste enthalten. Gibt es eine Möglichkeit zu prüfen, die aktuelle Elemente in der Liste, die gerade aufgebaut wird? Hier ist ein kurzes Beispiel:

Eingang

{
    "Stefan" : ["running", "engineering", "dancing"],
    "Bob" : ["dancing", "art", "theatre"],
    "Julia" : ["running", "music", "art"]
}

Ausgabe

["running", "engineering", "dancing", "art", "theatre", "music"]

Code ohne Verwendung einer Liste Verständnis

output = []
for name, hobbies in input.items():
    for hobby in hobbies:
        if hobby not in output:
            output.append(hobby)

Mein Versuch

[hobby for name, hobbies in input.items() for hobby in hobbies if hobby not in ???]
  • Erwägen Sie die Verwendung ein, anstatt, wie es eliminiert Duplikate automatisch für Sie.
  • Ich könnte die Ausgabe der Liste Verständnis in der set () - Konstruktor, aber ich Frage mich ob es einen Weg gibt, dies zu tun, nur mit list comprehension
  • Sie missbrauchen könnte yield from in Python ist3.3+ zu vermeiden, double-loop: set([(yield from x) for x in d.values()]). Beachten Sie, dass dies s=set((yield from x) for x in d.values()) Erträge fast die gewünschte Ausgabe... es enthält eine zusätzliche None, die Sie entfernen müssen, so s.discard(None). (Ich glaube, es gibt schon eine Frage zu diesem Unterschied im Verhalten zwischen gen exps und Liste-Verstehens).
Schreibe einen Kommentar