Dato un dizionario con tre livelli di chiavi, qual è il modo più veloce per sommare i valori? Ecco il mio approccio attuale:Python: somma i valori dei dizionari a tre livelli
from collections import defaultdict
dicts = [ {'a':{'b':{'c':1}}}, {'a':{'b':{'c':4, 'e':3}}} ]
def sum_three_deep_dict_values(dicts):
'''Read in two dicts and return a dictionary that contains their outer-joined keys and value sums'''
combined = defaultdict(lambda: defaultdict(lambda: defaultdict(int)))
for d in dicts:
for w1, val_dict in d.iteritems():
for w2 in val_dict.iterkeys():
for w3 in val_dict[w2].iterkeys():
combined[w1][w2][w3] += d[w1][w2][w3]
return combined
print sum_three_deep_dict_values(dicts)
Qui il risultato atteso è {'a': {'b': {'c': 5, 'e': 3}}}
L'obiettivo è quello di sommare i valori per i quali entrambi i dizionari hanno gli stessi tasti (come ad esempio d[a][b][c]
qui) e comprendono le restanti coppie chiave valore dal dizionario sia in il dizionario di output.
Ci sono un certo numero di domande su SO che sembrano rispondere alla domanda: "Come si dovrebbero sommare i valori dei dizionari annidati"? Leggendole la notte scorsa, comunque, ognuna delle quali ho trovato coinvolto qualche strano caso speciale o parametro, tipo "combina/ignora l'n-esimo livello di chiavi", o "applica una condizione if nel posto speciale". Volevo quindi sollevare la semplice domanda: qual è il modo migliore per sommare i valori dei dizionari double-nested in Python?
puoi avere più chiavi in primo e secondo livello? –
Oh sì. Le mie dimensioni effettive della chiave sono circa 100.000; 1.000.000; e 100.000.000 per i livelli uno, due e tre (rispettivamente). – duhaime
e l'output previsto è un dizionario a due livelli con le stesse chiavi dei due livelli del dizionario originale ma l'ultimo valore è la somma dei valori nel terzo livello? –