【发布时间】:2010-10-05 07:07:09
【问题描述】:
Python 中列表或集合用法的每个示例似乎都包含整数的琐碎情况,但我有两个对象列表,其中 name 属性定义两个对象实例是否“相同”(其他属性可能具有不同的值) .
我可以创建一个列表,其中包含两个列表中的所有项目,排序后,使用
tmpList = sorted(list1 + list2, key=attrgetter('name'))
但我该如何做同样的事情,以便从第二个列表中选择 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() 作为具有两个属性的对象的简写符号。)
似乎我不能在大多数 set 和 list 函数中使用 attrgetter() 函数,就像我可以使用 sorted() 函数一样,所以我无法弄清楚我应该如何做到这一点。我怀疑我可以使用 lambda 函数,但我对函数式编程不太熟悉,所以我似乎无法弄清楚。
天真的解决方案(首先选择两个列表中唯一的所有项目,然后将该列表与第二个列表的剩余内容组合)似乎很冗长,因此在 Python 中必须有一个更简单的方法。
【问题讨论】: