Agregar un elemento en cada diccionario de una lista (lista de comprensión)

Tengo una lista de diccionarios y quiero agregar una clave para cada elemento de esta lista. Lo intenté:

result = [ item.update({"elem":"value"}) for item in mylist ] 

pero el método de actualización devuelve Ninguno, por lo que mi lista de resultados está llena de Ninguno.

 result = [ item["elem"]="value" for item in mylist ] 

devuelve un error de syntax.

No debe preocuparse por crear una nueva lista de diccionarios, ya que las referencias a sus diccionarios actualizados son las mismas que las de sus diccionarios antiguos:

  for item in mylist: item.update( {"elem":"value"}) 

Si desea utilizar la comprensión de lista, hay una gran respuesta aquí: https://stackoverflow.com/a/3197365/4403872

En tu caso, sería así:

 result = [dict(item, **{'elem':'value'}) for item in myList] 

P.ej.:

 myList = [{'a': 'A'}, {'b': 'B'}, {'c': 'C', 'cc': 'CC'}] 

Entonces usa cualquiera

 result = [dict(item, **{'elem':'value'}) for item in myList] 

o

 result = [dict(item, elem='value') for item in myList] 

Finalmente,

 >>> result [{'a': 'A', 'elem': 'value'}, {'b': 'B', 'elem': 'value'}, {'c': 'C', 'cc': 'CC', 'elem': 'value'}] 

Puedes usar el mapa.

 result = map(lambda item: dict(item, elem='value'), myList) 

Si ya tienes la lista de artículos que puedes hacer:

 #elements = ['value'] * len(myList) result = map(lambda item: dict(item[0], elem=item[1]),zip(myList,elements)) 

entonces tienes los resultados

La respuesta de @ vk1011 es buena y puede extenderse con el operador de difusión de forma concisa y los nuevos objetos de diccionario son un beneficio adicional

  1. Para anular el valor de cualquier clave existente con la nueva, puede colocar el operador de propagación antes que el nuevo elemento.

     result = [{**item, 'elem':'value'} for item in myList] 
  2. Para anular el valor de la nueva entrada con uno existente, use el operador de propagación después del nuevo elemento

     result = [{'elem':'value', **item} for item in myList] 

Ambos métodos proporcionarán una lista de objetos del diccionario, incluido el nuevo elemento.

 >>> a = [ { 1:1 }, {2:2}, {3:3} ] >>> for item in a: ... item.update( { "test": "test" } ) ... >>> a [{'test': 'test', 1: 1}, {'test': 'test', 2: 2}, {'test': 'test', 3: 3}] 

Está utilizando incorrectamente una comprensión de lista, la llamada a item.update devuelve un valor None y, por lo tanto, su lista recién creada estará llena de valores None lugar de sus valores de dict esperados.

Solo necesita recorrer los elementos de la lista y actualizar cada uno en consecuencia, ya que la lista contiene referencias a los valores de dict .

O no utilice una lista de comprensión, o devuelva un nuevo dictado basado en el dict original más la nueva clave:

 [dict(list(item.items()) + [("elem", "value")]) for item in mylist]