两个字典的总和,字母数字项除外

2024-09-30 04:27:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着把两本字典里的具体项目加起来,但我总是得到一个空字典

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'}

但是输出是

{}

Tags: andkey字典sanotb2b1b3
3条回答

你可以用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})

使用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}

您可以这样尝试:

{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}

相关问题 更多 >

    热门问题