作为一名python新手,我需要解决这个非常简单的问题。 说我有一个类:Python,从列表中删除重复项并将其转换为one2many
class Event():
eid = 0
events = []
def __repr__(self):
return "id:"+str(self.eid) + "=>" + str(self.events)
def __str__(self):
return self.__repr__()
让我们创造出一些实例,并将它们保存到一个列表
eventset = list()
e1 = Event()
e1.eid = 0
e1.events = [('1','2','3','A')]
e3 = Event()
e3.eid = 1
e3.events = [('4','5','6','A')]
e2 = Event()
e2.eid = 0
e2.events = [('7','8','9','A')]
e4 = Event()
e4.eid = 1
e4.events = [('10','11','12','A')]
eventset.append(e1,e2,e3,e4)
打印EventSet这样得到:
[id:0=>[('1', '2', '3', 'A')], id:0=>[('7', '8', '9', 'A')], id:1=>[('4', '5', '6', 'A')], id:1=>[('10', '11', '12', 'A')]]
我想创建一个新的列表,它将如下所示:
[id:0=>[('1', '2', '3', 'A'),('7', '8', '9', 'A')], id:1=>[('4', '5', '6','A'),('10', '11', '12', 'A')]]
如何做到这一点优雅的“Pythonic方式”?
编辑:
需要保留在名单上事件要素的顺序
不希望创建新的事件实例复制
所以你想让你的班级有两种不同的存储方式吗?你知道如果你将一个变量赋值给一个对象,那是对同一个对象的引用吧?所以'a = b'为'a是b'赋予了'True'。它让我觉得你希望'eid'状态隐含在一个对象实例中,而不是api的一部分,但是我可能会误解你想要做的事情。 –
您应该将'eid'和'events'属性的定义移动到'def __init __(self):'方法中。在这种情况下不会导致问题,但是您的'events'列表是在类的所有实例之间共享的同一个对象(直到您通过执行'e1.events = []'来替换列表)。如果你使用了'e1.events.append(...)'或类似的函数 – dbr
'def __str __(self):return self .__ repr __()'可以更简单地写为'__str__ = __repr__', –