Разность значений из словаря python

237 просмотра
0
0 Комментариев

Как сопоставить и найти разность значений?

а={'a3':3,'a1':1,'a2':2}
d={'b1':2,'b3':3,'b2':1}

Надо получить:

{'a1': 1, 'a2': -1, 'a3': 0}


Добавить комментарий

3 Answers

Python Опубликовано 09.12.2018
0

Добавлю решение с помощью генератора:

a={'a3':3,'a1':1,'a2':2}
d={'b1':2,'b3':3,'b2':1}
 
A = {key: d[key.replace('a','b')] - val for key, val in a.items()}

Получаем:

{'a1': 1, 'a2': -1, 'a3': 0}

Добавить комментарий
0

{ak: d[bk]-a[ak] for ak, bk in zip(*map(sorted, (a, d)))}

для произвольного числа словарей

from functools import reduce
ds = {'a3':3,'a1':1,'a2':2}, {'b1':2,'b3':3,'b2':1}, {'v1':2,'v3':3,'v2':1}, {'s1':2,'s3':3,'s2':1}
 
{ks[0]: reduce(int.__sub__, (d[k] for d, k in zip(ds, ks))) for ks in zip(*map(sorted, ds))}

Добавить комментарий
0

Воспользуйтесь модулем Pandas:

In [16]: import pandas as pd
 
In [17]: s1 = pd.Series(a)
 
In [18]: s2 = pd.Series(d)
 
In [19]: s1
Out[19]:
a1    1
a2    2
a3    3
dtype: int64
 
In [20]: s2
Out[20]:
b1    2
b2    1
b3    3
dtype: int64
 
In [21]: s2.index = s2.index.str.replace('b','a')
 
In [22]: s2
Out[22]:
a1    2
a2    1
a3    3
dtype: int64
 
In [23]: s2 - s1
Out[23]:
a1    1
a2   -1
a3    0
dtype: int64

результат:

In [24]: (s2 - s1).to_dict()
Out[24]: {'a1': 1, 'a2': -1, 'a3': 0}

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up