Chaque exemple d'utilisation de liste ou d'ensemble dans Python semble inclure des cas triviaux d'entiers mais j'ai deux listes d'objets où l'attribut name définit si deux instances d'objets sont "identiques" ou non (les autres attributs peuvent avoir des valeurs différentes).Combinaison de deux listes d'objets basés sur un attribut
Je peux créer une liste qui contient tous les éléments des deux listes, triées, avec
tmpList = sorted(list1 + list2, key=attrgetter('name'))
mais comment dois-je faire la même sorte que les éléments de la liste qui ont la même valeur dans l'attribut name sont choisis parmi la deuxième liste?
Par exemple, la combinaison de ces deux listes
list1 = [obj('Harry',18), obj('Mary',27), obj('Tim', 7)]
list2 = [obj('Harry', 22), obj('Mary', 27), obj('Frank', 40)]
entraînerait
list = [obj('Harry',22), obj('Mary', 27), obj('Tim', 7), obj('Frank', 40)]
(j'ai utilisé obj() comme notation sténographique pour un objet qui a deux attributs.)
Il semble que je ne puisse pas utiliser la fonction attrgetter() dans la plupart des fonctions set et list comme je le peux avec la fonction sorted(), donc je ne peux pas comprendre comment je suis censé faire cela. Je suppose que je pourrais utiliser une fonction lambda, mais je ne connais pas trop la programmation fonctionnelle, donc je ne parviens pas à la comprendre. La solution naïve (d'abord choisir tous les éléments uniques dans les deux listes, puis combiner cette liste avec ce qui reste de la deuxième liste) semble assez longue, il doit donc y avoir un moyen plus simple en Python.
Pourquoi ne pas utiliser un dictionnaire? – JoshD