簡體   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