2017-10-15 4 views
0

Les deux dictionnaires se multiplient, je pris les décisions suivantes:Multiplication des valeurs du dictionnaire complexe

n1={'number1': '200', 'number2': '100'} 
n2={'number1': '2', 'number2': '1'} 

total = lambda dct_1, dct_2: {key: int(dct_2[key]) * int(dct_1[key]) for key in dct_2} 

total (n1, n2) 
# Out: {'number1': 400, 'number2': 100}  

Mais comment multiplier les valeurs dans ces dictionnaires:

IN: NG={'need1': [{'good2': 2, 'good3': 2}], 'need2': [{'good2': 3, 'good1': 3}]} 
    G= {'good1': 10, 'good2': 30, 'good3': 40} 


# OUT:{'need1': [{'good2': 60, 'good3': 80}], 'need2': [{'good2': 90, 'good1': 120}]} 

Répondre

1

Ce qui suit donne le résultat correct si i compris la question.

NG={'need1': [{'good2': 2, 'good3': 2}], 'need2': [{'good2': 3, 'good1': 3}]} 
G= {'good1': 10, 'good2': 30, 'good3': 40} 


for a, b in NG.items(): # iterate over (key,value)'s 
    new = [] 
    for c in b: # iterate over values 
     z = map(lambda w: (w[0], w[1]*G[w[0]]), c.items()) 
     new.ppend(dict(z)) # add dict to new value 
    NG[a] = new # update value 

print(NG) 

L'expression lambda crée tuples (clé, valeur) où la clé est la même et la valeur est value*G[key].

map(lambda w: (w[0], w[1]*G[w[0]]), c.items()) 

Ceux-ci sont enregistrés dans new qui les remplace l'ancienne valeur de la clé.

Sortie:

{'need1': [{'good2': 60, 'good3': 80}], 'need2': [{'good2': 90, 'good1': 30}]} 
+0

Merci pour la solution! J'ai essayé de le résoudre avec une compréhension de dictée, mais je ne pouvais pas. –