Python(web2py)提取前缀相同的表单变量出现顺序错乱如何解决
问题根源
Python 3.7以下版本的普通字典默认不保留插入顺序,且表单提交的字段顺序也不一定严格按照torre_1到torre_n的顺序传输,因此直接遍历form_vars.items()得到的列表顺序是不可控的。
解决方案
核心思路是提取torre_后缀的数字作为排序依据,对匹配的键值对按数字升序排列后再取值,代码示例如下:
form_vars = dict(request.vars) torre_pairs = [] for k, v in form_vars.items(): if not k.startswith('torre_'): continue # 提取后缀数字,兼容异常字段 try: suffix = int(k.split('_', 1)[1]) # 注意:表单提交的value默认是字符串,需转为数值类型用于后续计算 torre_pairs.append( (suffix, float(v)) ) except (IndexError, ValueError): # 跳过后缀不是数字的非法字段 continue # 按后缀数字升序排序后提取值 torre_pairs.sort() torres = [pair[1] for pair in torre_pairs]
额外优化提示
你原有的计算逻辑存在两处可优化点:
range(1, cantTorres)会从下标1开始遍历,直接跳过第一个元素torres[0],如果是需要遍历所有元素可改为range(cantTorres)- 循环内部手动写
i = i+1是冗余操作,for循环遍历range时会自动更新i的值,无需手动修改
内容的提问来源于stack exchange,提问作者NexusProx
相关产品推荐
相关产品推荐

