2
votes

Convertir la liste en ensemble basé sur la duplication de seulement certaines valeurs d'un tuple

En général, convertir une liste en ensemble est simple, comme ci-dessous:

a = [(1,"a1"), (2,"b2"), (3, "c3"), (1, "d4")]
set_a = some_magic(a)

# 1) set_a = set([(1,"a1"), (2,"b2"), (3, "c3")]) or
# 2) set_a = set([(1, "d4"), (2,"b2"), (3, "c3")])
# Both (1) or (2) are acceptible outputs.

Maintenant, je veux convertir une liste de tuples à définir, en ne considérant que la première valeur de tuple.

/ p>

a = [1,2,3,1]
set_a = set(a)    # set([1, 2, 3])

Y a-t-il une astuce "en une ligne" que je pourrais utiliser à la place de la fonction some_magic mentionnée ci-dessus?

Je veux évitez de faire une liste séparée pour la comptabilité, lequel des premiers index de tuples est déjà utilisé [ce qui aurait été la réponse évidente autrement]


2 commentaires

Comment décidez-vous quel tuple conserver de (1, "a1") et (1, "d4") ?


L'un ou l'autre va bien ... Je l'ai également mentionné dans la question ...


4 Réponses :


5
votes

essayez ceci:

set(dict(a).items())

dict (a) transformera la liste en un dictionnaire où les clés seront écrasées à chaque occurrence

le .items () extrait chaque paire clé-valeur dans une dict_items liste de tuples

le set () tourne dans l'ensemble que vous voulez.

Remarque: cela vous donnera le deuxième exemple, en gardant la toute dernière clé de tuple unique. Si vous voulez le premier, une approche différente sera nécessaire


0 commentaires

1
votes

Utilisation de la compréhension de liste:

print({x[0]: x for x in a}.values())

OUTPUT :

[(1, 'a1'), (2, 'b2'), (3, 'c3')]

MODIFIER :

Utilisation d'un dict:

a = [(1,"a1"), (2,"b2"), (3, "c3"), (1, "d4")]
seen = set()
print([x for x in a if x[0] not in seen and not seen.add(x[0])])


0 commentaires

0
votes
set_a = set(
    {x[0]: x for x in a}.values()
)

0 commentaires

0
votes

vous pouvez convertir en dictionnaire pour vous débarrasser des doublons

set(dict(a).items())

{(1, 'd4'), (2, 'b2'), (3, 'c3')}


0 commentaires