Python中list或set用法的每个示例似乎都包含一些小整数,但我有两个对象列表,其中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中必须有一种更简单的方法。
最佳答案
在我看来,使用dict
而不是列表(使用名称作为键,对象的其余部分作为值)可能更好。然后你就可以简单地dict1.update(dict2)
。
>>> dict1 = {"Harry": 18, "Mary": 27, "Tim": 7}
>>> dict2 = {"Harry": 22, "Mary": 27, "Frank": 40}
>>> dict1.update(dict2)
>>> dict1
{'Tim': 7, 'Harry': 22, 'Frank': 40, 'Mary': 27}
关于python - 根据属性组合两个对象列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3861491/