Python部分合并集

2024-05-18 23:43:15 发布

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

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

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


Tags: 数据number原因数字次数元组样本coca
2条回答

下面是一个示例,如果您想使用集合进行输入,并且只对任何格式的结果数据感兴趣(看起来我最近经常使用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

您可以使用计数器:

>>> 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理解:

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

相关问题 更多 >

    热门问题