【发布时间】:2016-11-22 07:07:55
【问题描述】:
我的代码中有一个特定类的对象列表,如下所示,
[object1, object2, object3, object4, object5, object6]
即这个类有两个属性:class.score和class.id
我可能有具有相同 ID 的对象。例如:
[object1.id, object2.id, object3.id, object4.id, object5.id, object6.id] = [1, 2, 3, 4, 2, 3]
但分数不同。例如:
[object1.score, object2.score, object3.score, object4.score, object5.score,
object6.score] = [0.25, 0.55, 0.6, 0.4, 0.30, .33]
我想要做的是列出没有重复的这个对象的 id-wise 但是 添加分数。因此,对于前面的示例,输出将是:
[object1.id, object2.id, object3.id, object4.id] = [1, 2, 3, 4]
[object1.score, object2.score, object3.score, object4.score] = [.25, .85, .93, .4]
我已经设法通过两个 for 循环来做到这一点:
k = 1
for object in list_of_objects:
j = 1
for object2 in list_of_objects:
if object.id == object2.id and j > k:
object.score = object.score + object2.score
list_of_objects.remove(object2)
j += 1
k += 1
但我希望以一种更类似于 Python 的方式来做这件事,类似于:
newlist[:] = [ x for x in list_of_objects if certain_condition(x)]
谢谢。
【问题讨论】:
-
你关心最终名单的顺序吗?
-
两个相同的对象怎么会有不同的属性?
-
@RenaeLider,我不认为它存在 Python
id(),它只是一个名为id的属性。我不认为第一个列表中的重复意味着它是同一个对象(尽管它确实暗示了这一点)。 -
@Cyphase 不是真的,我更关心只保留一个具有正确分数总和的唯一 ID