Каждый пример использования списка или набора в Python включает тривиальные случаи целых чисел, но у меня есть два списка объектов, где атрибут name определяет, являются ли экземпляры двух объектов «одинаковыми» или нет (другие атрибуты могут иметь разные значения).Объединение двух списков объектов на основе атрибута
я могу создать список, содержащий все элементы из обоих списков, отсортированных, с
tmpList = sorted(list1 + list2, key=attrgetter('name'))
но как я делаю то же самое, так что элементы списка, которые имеют одинаковое значение атрибута имя выбирают из второй список?
Например, сочетание этих двух списков
list1 = [obj('Harry',18), obj('Mary',27), obj('Tim', 7)]
list2 = [obj('Harry', 22), obj('Mary', 27), obj('Frank', 40)]
привело бы к
list = [obj('Harry',22), obj('Mary', 27), obj('Tim', 7), obj('Frank', 40)]
(я использовал OBJ() в виде короткой стороны обозначения для объекта, который имеет два атрибута.)
Кажется, я не могу использовать функцию attrgetter() в большинстве функций set и list, как я могу, с помощью функции sorted(), поэтому я не могу понять, как я должен это делать. Я подозреваю, что могу использовать функцию лямбда, но я не слишком хорошо знаком с функциональным программированием, поэтому мне, похоже, не удается понять это.
Наивное решение (сначала выберите все элементы, которые являются уникальными в обоих списках, а затем объедините этот список с тем, что осталось от второго списка) кажется довольно длинным, поэтому в Python должен быть более простой способ.
Почему бы не использовать словарь? – JoshD