将di之间的值相加

2024-04-25 23:56:02 发布

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

目标:

只要键相同,我就尝试对dict ct\u db和ct\u db2之间的值求和。你知道吗

示例:

RR-00==RR-00,所以取14+223

问题:

不会比较所有dict键,只要遍历dict,操作就会终止,但由于键的顺序不对,因此不会进行正确的计算。你知道吗

脚本:

ct_db = {u'AB-00 ': 18, u'RR-00': 14, u'LD-00 ': 56, u'SR-00': 33, u'YT-00 ': 452}
ct_db2 = {u'CD-07 ': 26, u'RR-00': 223, u'LD-00 ': 367, u'SR-00': 257, u'IA-00 ': 11}

not_installed = []
for elemA, elemB in zip (ct_db, ct_db2):
        if (elemA == elemB):
                print ("MATCH" + elemA + "-" + elemB)
                not_installed.append (ct_db [elemA] + ct_db2 [elemB])
        else:
                print ("NOT MATCH" + elemA + "-" + elemB)

print (not_installed)

输出:

NOT MATCH LD-00 - CD-07
NOT MATCH SR-00 - LD-00
NOT MATCH AB-00 - RR-00
NOT MATCH RR-00 - IA-00
NOT MATCH YT-00 - SR-00
[]

Tags: installeddbabmatchrrnotdictprint
3条回答

算法很简单:找到两个字典之间的公共键并计算总和。在Python 3中,dict.keys()方法返回一个set-like对象,因此我们可以使用&操作符来查找两组键之间的交集:

ct_db = {u'AB-00 ': 18, u'RR-00': 14, u'LD-00 ': 56, u'SR-00': 33, u'YT-00 ': 452}
ct_db2 = {u'CD-07 ': 26, u'RR-00': 223, u'LD-00 ': 367, u'SR-00': 257, u'IA-00 ': 11}

print(ct_db)
print(ct_db2)

common_keys = ct_db.keys() & ct_db2.keys()
not_installed = {k: ct_db[k] + ct_db2[k] for k in common_keys}
print(not_installed)

输出:

{'AB-00 ': 18, 'RR-00': 14, 'LD-00 ': 56, 'SR-00': 33, 'YT-00 ': 452}
{'CD-07 ': 26, 'RR-00': 223, 'LD-00 ': 367, 'SR-00': 257, 'IA-00 ': 11}
{'SR-00': 290, 'LD-00 ': 423, 'RR-00': 237}

更新

如果你只对和感兴趣,那么就用not_installed.values()

下面是一种使用^{}的方法:

from collections import Counter
ct_db = {u'AB-00 ': 18, u'RR-00': 14, u'LD-00 ': 56, u'SR-00': 33, u'YT-00 ': 452}
ct_db2 = {u'CD-07 ': 26, u'RR-00': 223, u'LD-00 ': 367, u'SR-00': 257, u'IA-00 ': 11}

counter = collections.Counter(ct_db)
counter += ct_db2
# >>> counter 
# Counter({'YT-00 ': 452, 'LD-00 ': 423, 'SR-00': 290, 'RR-00': 237, 'CD-07 ': 26, 'AB-00 ': 18, 'IA-00 ': 11})

# And if you want only the overlapping keys:
overlapping_keys = ct_db.keys() & ct_db2.keys()
counter = {k: v for k, v in counter.items() if k in overlapping_keys}
# >>> counter
# {'RR-00': 237, 'LD-00 ': 423, 'SR-00': 290}

您只需迭代其中一个dict的键,并检查每个键是否在另一个dict中:

not_installed = []

for elem in ct_db:
    if elem in ct_db2:
        not_installed.append(ct_db[elem] + ct_db2[elem])

print(not_installed)

输出:

[237, 423, 290]

相关问题 更多 >