Python中基于字典生成动态列算法得分对比表的实现问题
问题原因排查
你原有代码报错的核心原因是:[key] + (value) 操作中,value 是浮点型数值,不属于可迭代对象,无法直接和列表做拼接操作,同时原有逻辑仅支持单算法数据处理,未适配多算法对比的场景。
可行解决方案
以下代码可实现4个算法得分的对比表格生成,自动适配评估点数量,直接输出标准Markdown格式的表格,可直接复制使用:
# 1. 整理算法数据:可自行修改算法名称和对应得分字典 algorithms = [ ("算法1", {1: 1.0, 2: 0.5, 3: 0.25, 4: 0.5, 5: 0.25}), ("算法2", {1: 0.0, 2: 0.25, 3: 0.25, 4: 0.5, 5: 0.25}), ("算法3", {1: 0.8333333333333333, 2: 0.0, 3: 0.0, 4: 0.0, 5: 0.0}), ("算法4", {1: 0.1453355124360636, 2: 0.17621944768308642, 3: 0.17621944768308642, 4: 0.3260061445146773, 5: 0.17621944768308642}) ] # 2. 自动获取所有排序后的评估点(动态适配数量) eval_points = sorted(set().union(*[alg[1].keys() for alg in algorithms])) # 3. 生成Markdown格式表格 # 生成表头 header = ["算法名称"] + [f"评估点{p}" for p in eval_points] print("| " + " | ".join(header) + " |") # 生成分隔行 print("| " + " | ".join(["---"] * len(header)) + " |") # 生成每行算法数据,得分默认保留4位小数,可自行修改精度 for alg_name, score_dict in algorithms: row = [alg_name] + [f"{score_dict.get(p, 0):.4f}" for p in eval_points] print("| " + " | ".join(row) + " |")
输出效果示例
运行上述代码会生成如下格式的表格:
| 算法名称 | 评估点1 | 评估点2 | 评估点3 | 评估点4 | 评估点5 |
|---|---|---|---|---|---|
| 算法1 | 1.0000 | 0.5000 | 0.2500 | 0.5000 | 0.2500 |
| 算法2 | 0.0000 | 0.2500 | 0.2500 | 0.5000 | 0.2500 |
| 算法3 | 0.8333 | 0.0000 | 0.0000 | 0.0000 | 0.0000 |
| 算法4 | 0.1453 | 0.1762 | 0.1762 | 0.3260 | 0.1762 |
自定义调整说明
- 修改得分保留的小数位数:调整代码中
:.4f的数字即可,比如保留2位小数改为:.2f - 修改缺省得分:如果某个算法缺少对应评估点的得分,默认会填0,可修改
score_dict.get(p, 0)的第二个参数自定义缺省值 - 修改算法名称:直接调整
algorithms列表中每个元组的第一个元素即可
内容的提问来源于stack exchange,提问作者Minimalist
相关产品推荐
相关产品推荐

