作爲一名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__', –