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

Python多字典全组合生成、自动计算及结果查重实现方法咨询

Python 多字典组合计算与结果标记实现方案

1. 生成所有字典键值对的组合

用itertools.product处理多字典的笛卡尔积,这是应对任意数量字典的通用方案:

import itertools

# 示例字典集合(可扩展任意数量、任意键数的字典)
dict_list = [
    {"A0": 1, "A1": 2},
    {"B0": 2, "B1": 1}
]

# 将每个字典的键值对转为列表,供笛卡尔积计算
dict_items = [list(d.items()) for d in dict_list]

# 生成所有组合,每个元素是元组,包含各字典选出来的一组键值对
all_combinations = list(itertools.product(*dict_items))

2. 对组合执行自定义计算(以平均值为例)

封装计算逻辑,遍历所有组合完成计算,同时保存组合的关键信息:

def calculate_average(combination):
    # 提取组合中的所有数值
    values = [item[1] for item in combination]
    return sum(values) / len(values)

# 存储每个组合的索引、键名、数值、计算结果
combination_results = []
for idx, combo in enumerate(all_combinations):
    avg = calculate_average(combo)
    combo_keys = [item[0] for item in combo]
    combo_values = [item[1] for item in combo]
    combination_results.append({
        "index": idx,
        "combo_keys": combo_keys,
        "combo_values": combo_values,
        "result": avg
    })

如果需要其他计算(求和、加权平均等),直接修改calculate_average函数即可

3. 标记结果相同的项

通过字典分组结果,再为每个组合标记出结果相同的其他组合索引:

# 按计算结果分组(用round处理浮点数精度误差)
result_groups = {}
for item in combination_results:
    rounded_res = round(item["result"], 6)
    if rounded_res not in result_groups:
        result_groups[rounded_res] = []
    result_groups[rounded_res].append(item)

# 为每个组合添加相同结果的标记
for res, items in result_groups.items():
    if len(items) > 1:
        same_indices = [item["index"] for item in items]
        for item in items:
            item["same_as"] = [idx for idx in same_indices if idx != item["index"]]
    else:
        items[0]["same_as"] = []

# 打印最终结果
for item in combination_results:
    print(f"组合{item['index']}: 键={item['combo_keys']}, 值={item['combo_values']}, 平均值={item['result']}, 相同结果的组合={item['same_as']}")

示例运行输出

组合0: 键=['A0', 'B0'], 值=[1, 2], 平均值=1.5, 相同结果的组合=[3]
组合1: 键=['A0', 'B1'], 值=[1, 1], 平均值=1.0, 相同结果的组合=[]
组合2: 键=['A1', 'B0'], 值=[2, 2], 平均值=2.0, 相同结果的组合=[]
组合3: 键=['A1', 'B1'], 值=[2, 1], 平均值=1.5, 相同结果的组合=[0]

扩展提示

  • 若字典数量/键数量过大,建议用生成器遍历itertools.product(不转成列表),避免内存溢出
  • 浮点数精度要求高时,可替换round为decimal模块做精确计算

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:33:28