2010-06-18 4 views

Répondre

41

3.x Python:

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

Dans les deux 3.x Python et Python 2.4+:

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

(x.id, x) for x in object_list est une compréhension du générateur (et, bien, n'a pas besoin d'être enveloppé entre parenthèses comme une liste de compréhension doit être entouré entre parenthèses si elle est utilisée comme un seul argument pour un appel, bien sûr, cela signifie que dans d'autres circonstances, l'expression que j'ai utilisé devrait être ((x.id, x) for x in object_list)). Contrairement à la compréhension d'une liste, elle ne génère pas une liste réelle de tous les éléments et est donc plus efficace dans des situations comme celle-ci.

Comme une note de côté, Python a une méthode intégrée id():

Retour l ' « identité » d'un objet. C'est un entier qui est garanti unique et constant pour cet objet pendant sa durée de vie. Deux objets avec des durées de vie sans chevauchement peuvent avoir la même valeur id(). (Note de mise en œuvre: ceci est l'adresse de l'objet.)

Donc, si vous voulez laisser Python gérer les ids lui-même, vous pouvez le faire aussi:

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

ou

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

œuvres en Python 2.x – tlayton

+0

vous n'avez pas besoin de compréhension de la liste il – SilentGhost

+1

En effet. Comme indiqué dans ma réponse, une expression de générateur est meilleure. – JAB

3
dict(map(lambda x: [x.id, x], list)) 
Questions connexes