You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python字典中多元素项集在交易列表中的出现次数统计

多元素项集出现次数统计的通用实现方法

问题背景

现有交易字典:

transactions = {
   "T1": ["A", "B", "C", "E"],
    "T2": ["A", "D", "E"],
    "T3": ["B", "C", "E"],
    "T4": ["B", "C", "D", "E"],
    "T5": ["B", "D", "E"]
}

待统计的多元素项集列表:

items = [('B', 'C'), ('B', 'D'), ('B', 'E'), ('C', 'D'), ('C', 'E'), ('D', 'E')]

预期统计结果:

{('B','C'): 3, ('B', 'D'): 2, ('B', 'E'): 4, ('C', 'D'): 1, ('C', 'E'): 3, ('D', 'E'): 3}

现有函数仅支持单元素项集统计:

def get_num_occurrences(items, transactions):
    occurr = dict()
    for x in items:
        occurr[x] = 0
    for transaction in transactions.values():
        for item in transaction:
            occurr[item] += 1
    return occurr

需要修改该函数,使其支持二元、三元等任意长度的多元素项集统计。

通用实现方案

修改后的函数如下:

def get_num_occurrences(items, transactions):
    occurr = {item: 0 for item in items}
    # 将每个交易转换为集合,方便快速判断子集关系
    transaction_sets = [set(tx) for tx in transactions.values()]
    
    for item_set in items:
        for tx_set in transaction_sets:
            # 判断当前项集是否是该交易的子集
            if set(item_set).issubset(tx_set):
                occurr[item_set] += 1
    return occurr

逻辑说明

  1. 初始化计数字典:用字典推导式直接初始化所有待统计项集的计数为0,比循环赋值更简洁高效。
  2. 交易转集合:把每个交易列表转换成集合,利用集合的issubset方法可以快速判断一个项集是否完全包含在该交易中,这是适配多元素项集的核心逻辑。
  3. 遍历统计:对每个待统计的项集,遍历所有交易集合,若项集是交易集合的子集,就给对应计数加1。这种方式不限制项集的长度,不管是1元、2元还是N元项集,都能正确统计出现次数。

内容的提问来源于stack exchange,提问作者LeGOATJames23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 02:06:25