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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:39:02