stessa idea la tua domanda prima della modifica.
>>> data = [{'id1': 'a', 'price': '2', 'color': 'green'},
... {'id1': 'b', 'price': '5', 'color': 'red'},
... {'id1': 'a', 'price': '2', 'color': 'green'}]
costruire un dizionario temporanea e si accumulano i valori in esso
>>> temp = {}
>>> for d in data:
... if d['id1'] not in temp:
... temp[d['id1']] = {}
... temp_d = temp[d['id1']]
... temp_d['price'] = temp_d.get('price', 0) + int(d['price'])
... temp_d.setdefault('colors', set()).add(d['color'])
...
>>> temp
{'a': {'colors': {'green'}, 'price': 4}, 'b': {'colors': {'red'}, 'price': 5}}
Quindi, utilizzando la lista di comprensione e di comprensione dizionario, ricostruire l'elenco dei dizionari.
>>> [{'id1': k, 'price': v['price'], 'colors': v['colors']} for k, v in temp.items()]
[{'id1': 'a', 'colors': {'green'}, 'price': 4}, {'id1': 'b', 'colors': {'red'}, 'price': 5}]
>>> data = [{'id1': 'a', 'price': '2'}, {'id1': 'b', 'price': '5'},
... {'id1': 'a', 'price': '2'}]
creare un dizionario temporanea in cui siamo in grado di accummulate la somma dei prezzi contro la loro ID,
>>> temp = {}
>>> for d in data:
... temp[d['id1']] = temp.get(d['id1'], 0) + int(d['price'])
...
>>> temp
{'a': 4, 'b': 5}
Qui si cerca di ottenere il valore di d['id1']
da temp
e se non viene trovato, 0 verrà restituito. Quindi aggiungiamo il price
dal dizionario corrente e memorizziamo il risultato nello temp
rispetto all'id1 corrente.
Poi ricostruire l'elenco dei dizionari, con list comprehension e dizionario di comprensione, come questo
>>> [{'id1': k, 'price': temp[k]} for k in temp]
[{'price': 4, 'id1': 'a'}, {'price': 5, 'id1': 'b'}]
Very nice. L'unico problema è che il primo dict in realtà ha un altro valore, colore, in una delle occorrenze {'id1': 'a', 'prezzo': '2', 'colore': 'rosso'} Come posso mantenere questo in l'ultimo atto? – DauleDK
@DauleDK Il colore sarà lo stesso per il dato id1 in tutti i dizionari? Ad esempio, se 'id1' è' a' e il colore sarà sempre 'green'? – thefourtheye
Non sempre, forse è possibile concatenare i valori? – DauleDK