如何遍历Python字典值 筛选指定区间数值并保留对应键与索引
问题根因
你的代码每次匹配到符合区间的概率值时,都会直接对dt整体赋新值,之前循环存入的所有结果会被完全覆盖,最终只会保留最后一次遍历到的匹配项,也就是示例里的{350: {'6': 0.52}}。
修复方案
遍历过程中不要重写整个结果字典,而是按层级追加内容:
- 每遍历到一个原字典的实例索引,先在结果字典中为该索引创建空的子字典
- 匹配到符合阈值的概率时,直接将类别位置、概率值作为键值对存入对应实例的子字典中
- 如果你需要严格按照最开始描述的0.480.55区间筛选,把判断条件里的0.45改成0.48即可,当前代码匹配的是你给出的期望输出对应的0.450.55区间
修复后的完整代码:
d = { 348: [0, 0, 0, 0.5, 0, 0, 0.49], 349: [0, 0, 0.3, 0.48, 0.49, 0.55, 0.9], 350: [0, 0, 0.3, 0.45, 0.0, 0.52, 0.8] } dt = {} for instance_id, probs in d.items(): dt[instance_id] = {} for idx, prob in enumerate(probs): if 0.45 <= prob <= 0.55: dt[instance_id][str(idx + 1)] = prob print(dt)
运行结果
代码执行后输出如下,和你预期的结构完全一致(已修正你给出的期望示例里的标点笔误,比如把错写的逗号改成冒号、小数点):
{348: {'4': 0.5, '7': 0.49}, 349: {'4': 0.48, '5': 0.49, '6': 0.55}, 350: {'4': 0.45, '6': 0.52}}
内容的提问来源于stack exchange,提问作者Natália Resende
相关产品推荐
相关产品推荐

