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

如何在defaultdict中同时存储组合计数与辅助信息

解决方案:在计数时同时存储辅助信息

你可以通过调整defaultdict的初始化逻辑,让它每个键对应一个包含计数和辅助信息列表的可变结构(比如列表),这样就能轻松同时更新计数和收集辅助信息了。下面是修改后的完整代码:

import pandas as pd
from itertools import combinations
from collections import defaultdict

mydf = pd.DataFrame({
    'auxinfo': ['first', 'second', 'third'], 
    'list_to_count': [['apple', 'banana'], ['apple', 'banana', 'chicken'], ['apple']]
})

# 初始化defaultdict,每个键对应 [计数, 辅助信息列表]
d = defaultdict(lambda: [0, []])

for r in mydf.itertuples():
    combos = combinations(r.list_to_count, 2)
    for combo in combos:
        combo_name = ','.join(sorted(combo))
        # 更新计数
        d[combo_name][0] += 1
        # 添加当前行的auxinfo到列表
        d[combo_name][1].append(r.auxinfo)

# 如果需要把结果转换成你期望的元组格式(可选)
result = {k: tuple(v) for k, v in d.items()}
print(result)

代码解释

  1. 初始化defaultdict:用lambda: [0, []]作为默认工厂函数,这样每个新组合第一次出现时,会自动创建一个[0, []]的结构——第一个元素是计数,第二个是辅助信息列表。
  2. 更新数据:遍历每个组合时,直接对计数加1,并把当前行的auxinfo追加到列表里,操作非常直观。
  3. 转换为元组格式(可选):如果你需要最终结果是元组(比如不可变的结构),可以用字典推导式把每个值从列表转成元组。

运行结果

执行后会输出你期望的格式:

{'apple,banana': (2, ['first', 'second']), 'apple,chicken': (1, ['second']), 'banana,chicken': (1, ['second'])}

为什么不用defaultdict(tuple)?因为元组是不可变类型,无法直接修改计数或追加元素,用列表作为中间结构会更灵活,最后再转成元组即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 20:07:54