2017-07-13 3 views
-1

Supposons que vous avez le dictionnaire de remorquage A et B:Comment obtenir des différences entre deux dictionnaires en fonction des valeurs de liste?

A = {'a':[5, 3], 't':[4], 'd':[2, 5, 6]} 
B = {'s':[11,5], 'a':[4,6], 'd':[0, 6, 3]} 

Comment pouvez-vous obtenir des différences entre les valeurs A et B dans le nouveau dictionnaire? différence signifie A - B => par exemple pour la touche 'a' est [5, 3] - [4,6] résultat est [1, -3]

+4

Définir "différence". Est-ce que c'est par A ou par B? De plus, les clés ne sont même pas les mêmes entre les deux. –

+0

différence de clés que vous voulez? ou valeur dif? – Haranadh

+2

Je pense qu'un exemple de votre résultat souhaité est nécessaire. –

Répondre

2

Je suppose que vous voulez dire A - B et seulement sur key s que exister dans les deux. Ce sont beaucoup d'hypothèses, mais votre question est un peu vague ..

Que diriez-vous ceci:

A = {'a':[5, 3], 't':[4], 'd':[2, 5, 6]} 
B = {'s':[11,5], 'a':[4,6], 'd':[0, 3]} 

C = {k: [x - y for x, y in zip(v, B[k])] for k, v in A.items() if k in B} 
print(C) # {'d': [2, 2], 'a': [1, -3]} 

Si vous ne vous inquiétez pas si les key s existent à la fois et que vous voulez simplement « soustraire » B aller avec .get() et zip_longest from itertools avec un paramètre par défaut de 0 comme ceci:

from itertools import zip_longest 
C = {k: [x - y for x, y in zip_longest(v, B.get(k, []), fillvalue=0)] for k, v in A.items()} 
print(C) # {'a': [1, -3], 'd': [2, 2, 6], 't': [4]} 
+0

Si vous aviez attendu une clarification d'OP avant de poster, cette question mérite d'être close telle quelle. –

+0

@ cᴏʟᴅsᴘᴇᴇᴅ Vous avez raison, j'ai regretté de poster ceci. Dois-je supprimer? –

+0

Mm, ce n'est pas vraiment mon endroit à dire, bien que je vous suggère de le faire (vous sauver de tout dv'ers), et ensuite restaurer une fois OP clarifie que vous avez fait ce qu'ils veulent ... –

1

Comment cela? il ajoute des valeurs B manquantes de A et si la clé ne manque pas, il soustrait la somme de la valeur B de la somme de la valeur en A:

A = {'a':[5, 3], 't':[4], 'd':[2, 5, 6]} 
B = {'s':[11,5], 'a':[4,6], 'd':[0, 3]} 

def merge_and_differences(d1,d2): 
    d3 = d1.copy() 
    for k,v in d2.items(): 
     if k not in d3: 
      d3[k] = v 
     else: 
      d3[k] = sum(d3[k]) - sum(d2[k]) 
    return d3 

C = merge_and_differences(A,B) 

print (C) 

résultats:

{'a': -2, 's': [11, 5], 't': [4], 'd': 10}