我尝试将两个字典中的特定项目相加,但是我总是得到一个空的字典。
d1 = {'primary_key': '01/01/20185511', 'Fecha': '01/01/2018', 'linea': '551', 'Sentido': '1', 'trayecto': '3', 'SA_A_': '0', 'SA_B1': '1', 'SA_B2': '2', 'SA_B3': '3'}
d2 = {'primary_key': '01/01/20185511', 'Fecha': '01/01/2018', 'linea': '551', 'Sentido': '1', 'trayecto': '4', 'SA_A_': '1', 'SA_B1': '1', 'SA_B2': '2', 'SA_B3': '3'}
结果应该是
{'SA_A_': '1', 'SA_B1': '2', 'SA_B2': '4', 'SA_B3': '6'}
我正在尝试
{key: int(d1.get(key, 0)) + int(d2.get(key, 0)) for key in set(d1) | set(d2) if key is not 'primary_key' and not 'Fecha' and not 'linea' and not 'Sentido' and not 'trayecto'}
但是输出是
{}
答案 0 :(得分:0)
使用dict-comprehension
:
print({k2: int(v) + int(v2) for (k,v), (k2,v2) in zip(d1.items(),d2.items()) if k2 in select_list})
意思是:
d1 = {'primary_key': '01/01/20185511', 'Fecha': '01/01/2018', 'linea': '551', 'Sentido': '1', 'trayecto': '3', 'SA_A_': '0', 'SA_B1': '1', '': '2', 'SA_B3': '3'}
d2 = {'primary_key': '01/01/20185511', 'Fecha': '01/01/2018', 'linea': '551', 'Sentido': '1', 'trayecto': '4', 'SA_A_': '1', 'SA_B1': '1', 'SA_B2': '2', 'SA_B3': '3'}
d3 = {}
select_list = ['SA_A_', 'SA_B1','SA_B2','SA_B3']
for (k,v), (k2,v2) in zip(d1.items(),d2.items()):
if k2 in select_list:
d3[k2] = int(v) + int(v2)
print(d3)
输出:
{'SA_A_': 1, 'SA_B1': 2, 'SA_B2': 4, 'SA_B3': 6}
答案 1 :(得分:0)
您可以尝试这种方式:
{key: int(d1[key]) + int(d2[key]) for key in [val for val in d1.keys()] if key in ['SA_A_', 'SA_B1', 'SA_B2', 'SA_B3']}
或者您可以这样做:
{key: int(d1[key]) + int(d2[key]) for key in [val for val in d1.keys()] if key[0:2] == 'SA'}
输出:
{'SA_A_': 1, 'SA_B1': 2, 'SA_B2': 4, 'SA_B3': 6}
答案 2 :(得分:0)
您可以像使用collections.Counter
>>> import collections
>>> d1
{'primary_key': '01/01/20185511', 'Fecha': '01/01/2018', 'linea': '551', 'Sentido': '1', 'trayecto': '3', 'SA_A_': '0', 'SA_B1': '1', 'SA_B2': '2', 'SA_B3': '3'}
>>> d2
{'primary_key': '01/01/20185511', 'Fecha': '01/01/2018', 'linea': '551', 'Sentido': '1', 'trayecto': '4', 'SA_A_': '1', 'SA_B1': '1', 'SA_B2': '2', 'SA_B3': '3'}
>>> d1c = {k:int(v) for k,v in d1.items() if k.startswith('SA')}
>>> d2c = {k:int(v) for k,v in d2.items() if k.startswith('SA')}
>>> d1c
{'SA_A_': 0, 'SA_B1': 1, 'SA_B2': 2, 'SA_B3': 3}
>>> d2c
{'SA_A_': 1, 'SA_B1': 1, 'SA_B2': 2, 'SA_B3': 3}
>>> collections.Counter(d1c) + collections.Counter(d2c)
Counter({'SA_B3': 6, 'SA_B2': 4, 'SA_B1': 2, 'SA_A_': 1})