【发布时间】:2019-02-09 22:16:24
【问题描述】:
我有一个类似如下的课程:
class test(object):
def __init__(self, ID, A, B, C, D, E):
self.ID = ID
self.A = A
self.B = B
self.C = C
self.D = D
self.E = E
列表中有多个对象:
test1 = test(6124, 6, 'Tim', 'Football', 'Soccer', 'USA')
test2 = test(6124, 7, 'Joe', 'Basketball', 'Soccer', 'USA')
test3 = test(6188, 8, 'Joe', 'Basketball', 'Soccer', 'USA')
test4 = test(6188, 9, 'Joe', 'Basketball', 'Soccer', 'USA')
test5 = test(6188, 10, 'Tim', 'Football', 'Soccer', 'USA')
objects_list = [test1, test2, test3, test4, test5]
我想根据它们的 ID 属性合并这些对象,对于剩余的属性,只需列出各个对象:
对于本示例,结果将是两个对象(仅作为两个唯一 ID),其中一个对象具有属性:
self.ID = 6124
self.A = [6, 7]
self.B = ['Tim', 'Joe']
self.C = ['Football', 'Basketball']
self.D = ['Soccer', 'Soccer']
self.E = ['USA', 'USA]
如何以这种方式合并列表中的对象?我正在寻找一种解决方案,它不需要我命名任何属性,而是我要合并的属性的名称 (ID)。如果可以将此解决方案推广到一次合并多个属性(例如ID 和A 和E),那就太好了。
谢谢! 杰克
【问题讨论】:
-
为什么不使用
pandas(即数据操作库)?那将非常简单 -
@RafaelC 我的实际用例比这复杂得多。这个简单的例子只是为了以可重复的方式展示一般想法。
-
您有多种选择。您可以使用列表字典,其中键是对象 ID,列表是对象。您可以实现一个数据库来跟踪对象关系。您还可以更改对象以将所有非 ID 属性存储在列表中。您所要做的就是添加一个类似于 init 的方法,将数据附加到列表中:self.A.append(A)。我认为我们可能需要有关您的用例的更多信息。
-
@JackArnestad 比这更复杂只是一个支持使用数据操作库的参数。你的代码会变得很大,很混乱,我会说可能无法维护,你可以通过使用库的一行代码来实现你想要的。但这当然取决于你。无论如何,我已经发布了一个解决方案。
标签: python python-3.x class oop object