Comprensione dell'elenco, controlla se l'articolo è unico

2022-07-29 15:30:05

Sto cercando di scrivere un'istruzione di comprensione dell'elenco che aggiungerà un elemento solo se non è attualmente contenuto nell'elenco. C'è un modo per controllare gli elementi correnti nell'elenco che è attualmente in costruzione? Ecco un breve esempio:

Inserimento

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

Risultato

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

Codice senza utilizzare una comprensione dell'elenco

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

Il mio tentativo

[hobby for name, hobbies in input.items() for hobby in hobbies if hobby not in ???]

- Stefan Bossbaly

Source
Risposta


32
  • Puoi usare set e impostare la comprensione:

    {hobby for name, hobbies in input.items() for hobby in hobbies}
    

    Come m.wasowski ha menzionato, noi non t usa name qui, quindi possiamo usare invece item.values():

    {hobby for hobbies in input.values() for hobby in hobbies}
    

    Se hai davvero bisogno di un elenco come risultato, puoi farlo (ma nota che di solito puoi lavorare con i set senza alcun problema):

    list({hobby for hobbies in input.values() for hobby in hobbies})