python - 根据属性组合两个对象列表

标签 python list

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() 函数,就像我可以使用 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/

相关文章:

Python字典键(类对象)与多个比较器的比较

python - 如何将图像裁剪、调整大小表示为仿射变换?

python - 如何检查第一个列表是否以相同的顺序出现在第二个列表中的某个位置

python - 获取Python中列表的最小N个元素的索引

python - 递归嵌套列表

python - 过滤外键值 django

python - 神经网络分类

python - Numpy 数组索引行为

python - 获取 "list index out of range"尝试创建从先前列表的值添加的二维列表

python - 删除Python列表中的循环