2012-12-28 12 views
12

Ho una lista di dizionari e voglio aggiungere una chiave per ogni elemento di questa lista. ho provato:Aggiungere un elemento in ogni dizionario di una lista (comprensione lista)

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

ma il metodo di aggiornamento restituisce None, quindi il mio elenco dei risultati è pieno di None.

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

restituisce un errore di sintassi.

risposta

12

Non è necessario preoccuparsi di costruire un nuovo elenco di dizionari, dal momento che i riferimenti ai vostri dizionari aggiornati sono gli stessi dei riferimenti ai tuoi vecchi dizionari:

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

Destra, ho voluto usare una lista di comprensione, ma è più semplice senza di essa . Grazie. –

+0

Questo dovrebbe funzionare anche con una comprensione di lista. per esempio. [item.update .... per item in myList] – Erich

2
>>> 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}] 

Si sta utilizzando un elenco di comprensione in modo non corretto, la chiamata a item.update restituisce un valore None e quindi la vostra lista appena creata sarà pieno di None valori anziché i vostri attesi dict valori.

È necessario solo scorrere gli elementi nell'elenco e aggiornarli di conseguenza, poiché l'elenco contiene riferimenti ai valori dict.

0

o non utilizzare un elenco comprensione, o di restituire un nuovo dict basato sul dict originale più la nuova chiave:

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

Se si desidera utilizzare di lista, c'è una grande risposta qui: https://stackoverflow.com/a/3197365/4403872

Nel tuo caso, sarebbe come questo:

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

Eg .:

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

Quindi utilizzare uno

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

o

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

Infine,

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

Questa è una risposta migliore di quella accettata –

0

È possibile utilizzare la mappa.

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

Se hai già la lista dei lementi che si può fare:

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

allora si hanno i risultati

Problemi correlati