def comprehension python lambda dictionary

def - python lambda function list comprehension



Reduzca la lista de objetos de Python a dict de object.id-> object (3)

En Python 3.x:

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

Tanto en Python 3.x como en Python 2.4+:

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

(x.id, x) for x in object_list es un generador de comprensión (y, muy bien, no necesita estar entre paréntesis, ya que una lista de comprensión tiene que estar entre paréntesis si se usa como un solo argumento para una llamada; por supuesto, esto significa que en otras circunstancias, la expresión que usé tendría que ser ((x.id, x) for x in object_list) ). A diferencia de una comprensión de lista, no generará una lista real de todos los elementos y, por lo tanto, es más eficiente en situaciones como esta.

Como nota al margen, Python tiene un método incorporado id() :

Devuelve la "identidad" de un objeto. Este es un número entero que se garantiza que sea único y constante para este objeto durante su vida útil. Dos objetos con tiempos de vida no superpuestos pueden tener el mismo valor id (). (Nota de implementación: esta es la dirección del objeto.)

Entonces, si quisieras dejar que Python maneje las identificaciones por sí mismo, podrías hacerlo como:

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

o

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

Tienes una lista de objetos y cada uno de ellos tiene una propiedad de id .

Esta es mi manera de convertirlo en dictados donde las claves son identificadores y los valores son objetos:

reduce( lambda x,y: dict(x.items() + { y.id : y}.items()), list, {} )

Sugerir una mejor manera de hacerlo.


dict([(x.id, x) for x in list])


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