Python:基于列表最值条件从字典取值的代码调试问题
解决方法:正确构建字典并匹配条件
我来帮你梳理下问题出在哪,再给你可行的实现方案~
首先你原来的代码有几个明显的问题:
- 字典的键值关系搞反了:用
valores当键的话,根本没法通过vdif的条件去查找对应元素; - 函数调用写法错误:
max[small]、min[small]是语法错误,应该用函数调用形式max(small)、min(small); - 取值逻辑完全错误:你试图用布尔值(比如
'valores' == max(small))当字典键,这肯定找不到对应的条目呀。
下面给你两种适配不同场景的实现方式:
方式一:遍历匹配(适合vdif有重复值的场景)
如果你的vdif列表里可能存在重复数值,遍历的方式能灵活处理(下面例子取第一个匹配项,你也可以改成收集所有符合条件的元素):
# 先计算small列表的最大、最小值 max_small = max(small) min_small = min(small) # 初始化需要的变量 vsup = None vinf = None s = None # 同时遍历三个列表的对应元素 for esf, v_diff, val in zip(esferas, vdif, valores): # 匹配vdif等于small最大值的情况,取对应valores值 if v_diff == max_small: vsup = val # 匹配vdif等于small最小值的情况,取对应valores和esferas值 if v_diff == min_small: vinf = val s = esf
方式二:构建vdif为键的字典(适合vdif无重复值的场景)
如果vdif里的每个数值都是唯一的,用字典映射会更简洁高效:
# 构建字典:键是vdif的数值,值是(对应esferas元素, 对应valores元素)的元组 d = {v: (esf, val) for esf, v, val in zip(esferas, vdif, valores)} # 计算small列表的最大、最小值 max_small = max(small) min_small = min(small) # 根据条件直接取值 vsup = d[max_small][1] # 取vdif等于max_small对应的valores vinf = d[min_small][1] # 取vdif等于min_small对应的valores s = d[min_small][0] # 取vdif等于min_small对应的esferas
两种方式都能实现你想要的效果,根据vdif是否有重复值选择就行~
内容的提问来源于stack exchange,提问作者Javier Lopez Tomas
相关产品推荐
相关产品推荐

