2017-08-11 1 views
1

Le problème de la multiplication de deux dictionnaires « simples » à l'aide de lambda, je pris les décisions suivantes:Effectuer des opérations algébriques avec des dictionnaires imbriqués en utilisant "lambda" et "dictionnaire de compréhension"?

v1={'product1': '100', 'product2': '120'} 
v2={'product1': '3', 'product2': '2'} 

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

foo(v1, v2) 
# Out: {'product1': 300, 'product2': 240} 

Comment puis-je multiplier deux dictionnaires imbriqués de la même manière?

V={'id1': [{'product1': '1', 'product2': '2'}],'id2': [{'product1': '3', 'product2': '4'}]} 
Z={'id1': [{'благо1': '10', 'благо2': '25'}], 'id2': [{'product1': '20', 'product2': '15'}]} 

La réponse devrait être la suivante:

Out:={'id1': [{'product1': '10', 'product2': '50'}], 'id2': [{'product1': '60', 'product2': '60'}]} 

J'utilise python3.

+1

Pourquoi avez-vous des listes dans V, Z? Ils ne sont pas des dictionnaires imbriqués de cette façon – FLab

+0

C'est logique ... peut-être pas tout à fait imbriqué. – Yaroslav

Répondre

0

J'omettez le lambda parce que la compréhension est déjà assez long, mais, fondamentalement, vous pouvez utiliser:

{outerkey: [{innerkey: int(V[outerkey][0][innerkey])*int(Z[outerkey][0][innerkey]) 
      for innerkey in V[outerkey][0]}] 
for outerkey in V} 

me donner:

{'id1': [{'product1': 10, 'product2': 50}], 
'id2': [{'product1': 60, 'product2': 60}]} 

Note: Je suppose que les dictionnaires avaient le même touches:

V={'id1': [{'product1': '1', 'product2': '2'}],'id2': [{'product1': '3', 'product2': '4'}]} 
Z={'id1': [{'product1': '10', 'product2': '25'}], 'id2': [{'product1': '20', 'product2': '15'}]} 
+0

Oui, les clés sont identiques. Merci pour l'aide! – Yaroslav

+0

@Yaroslav Je suis content que cela a fonctionné. S'il vous plaît ne pas oublier de [accepter] (https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) la réponse la plus utile – MSeifert