2 votes

En python, comment puis-je faire correspondre deux listes de tuples par un élément de tuple?

Supposons que j'ai names comme une liste de tuples qui contiennent des tuples de noms dans un ordre arbitraire :

names = [(1,"Alice"), (2,"Bob")]

et genders comme une autre liste de tuples qui contiennent des tuples de genre dans un ordre arbitraire :

genders = [(2,"male"), (1,"female")]

Comment puis-je faire correspondre efficacement les deux listes en utilisant les premiers éléments des tuples comme clé pour obtenir :

result = [("Alice","female"), ("Bob","male")]

7voto

Convertir en dictionnaires, rassembler les clés et itérer.

7voto

codeslapper Points 11

Réponse facile en une ligne, s'exécute lentement:

[(name, gender) for (id0, gender) in genders for (id1, name) in names if id0==id1]

Meilleure réponse (voir la réponse d'Ignazio):

namedict = dict(names)
genderdict = dict(genders)
[(namedict[id], genderdict[id]) for id in set(namedict) & set(genderdict)]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X