您有對象列表,每個對象都有id屬性。 這裏是我的方式來隱蔽其與dict鍵進行ID和值對象:將python對象列表減少爲字典object.id - > object
reduce(
lambda x,y: dict(x.items() + { y.id : y}.items()),
list,
{}
)
建議更好的方式來做到這一點。
您有對象列表,每個對象都有id屬性。 這裏是我的方式來隱蔽其與dict鍵進行ID和值對象:將python對象列表減少爲字典object.id - > object
reduce(
lambda x,y: dict(x.items() + { y.id : y}.items()),
list,
{}
)
建議更好的方式來做到這一點。
在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)
dict([(x.id, x) for x in list])
dict(map(lambda x: [x.id, x], list))
作品在Python 2.x的 – tlayton 2010-06-18 14:08:40
你不需要列表理解有 – SilentGhost 2010-06-18 14:09:05
確實。正如我的回答中所述,生成器表達式更好。 – JAB 2010-06-18 14:15:55