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]
4 Réponses :
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
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])])
set_a = set( {x[0]: x for x in a}.values() )
vous pouvez convertir en dictionnaire pour vous débarrasser des doublons
set(dict(a).items()) {(1, 'd4'), (2, 'b2'), (3, 'c3')}
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 ...