繁体   English   中英

Python合并集部分

[英]Python merge sets partially

我有一组元组 (set1),其中每个元组是 (somename1, somename2, Number)。 其中 number 表示我们看到 somename1, somename2 的次数。 我想将它与另一个集合 (set2) 合并,其中 somename1、somename2 可能在集合中,并相应地更新 Number。 现在,出于显而易见的原因, set1 和 set2 返回一个空集。 如何有效地更新 set1?

样本数据 = Set1 = {('soda','coca cola',5), ('chocolate','mars',13)}

您可以使用计数器:

>>> from collections import Counter
>>> Set1 = Counter({('soda','coca cola'): 5})
>>> Set2 = Counter({('soda','coca cola'): 3, ('chocolate','mars'): 10})
>>> Set1 + Set2
Counter({('soda', 'coca cola'): 8, ('chocolate', 'mars'): 10})

如果您不想在 Set2 中添加不在 Set1 中的键,则可以使用 dict comprehension:

>>> Set1 = {('soda','coca cola'): 5}
>>> Set2 = {('soda','coca cola'): 3, ('chocolate','mars'): 10}
>>> {k: Set1[k] + Set2.get(k, 0) for k in Set1}

这是一个示例,如果您想使用集合进行输入,并且只对任何格式的结果数据感兴趣(看起来我最近经常使用defaultdict ):

from itertools import chain
from collections import defaultdict

s1 = set((
    ('a', 'b', 1), ('c', 'd', 2)
))
s2 = set((
    ('a', 'b', 2), ('c', 'd', 3), ('e', 'f', 4)
))

s3 = defaultdict(int)

for name1, name2, count in chain(s1, s2):
    s3[name1, name2] += count

for (name1, name2), total_count in s3.items():
    print(name1, name2, total_count)

印刷:

c d 5
e f 4
a b 3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM