2010-06-18 73 views

回答

41

在Python 3.X:

object_dict = {x.id: x for x in object_list} 

在這兩個的Python 3.X和Python 2.4 +:

object_dict = dict((x.id, x) for x in object_list) 

(x.id, x) for x in object_list是發電機的理解(和,很好,並不需要是如果列表理解需要用括號括起來,如果它被用作調用的單個參數;當然,這意味着在其他情況下,我使用的表達式必須是((x.id, x) for x in object_list))。與列表理解不同,它不會生成所有項目的實際列表,因此在這種情況下更高效。

作爲邊注,Python有一個內置的方法id()

返回的對象的「身份」。這是一個整數,它在其生命週期中保證對這個對象唯一且恆定。具有非重疊生命週期的兩個對象可能具有相同的id()值。 (實現注意事項:這是對象的地址。)

所以,如果你想讓Python中處理自身的ID,你可以做到這一點爲:

object_dict = {id(x): x for x in object_list} 

object_dict = dict((id(x), x) for x in object_list) 
9
dict([(x.id, x) for x in list]) 
+0

作品在Python 2.x的 – tlayton 2010-06-18 14:08:40

+0

你不需要列表理解有 – SilentGhost 2010-06-18 14:09:05

+1

確實。正如我的回答中所述,生成器表達式更好。 – JAB 2010-06-18 14:15:55

3
dict(map(lambda x: [x.id, x], list)) 
相關問題