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

Python3字典保留重复键方法咨询:表单提交需重复键值对

如何在Python中处理带重复键的FormData提交

嘿,这个问题我太熟悉了!Python的标准字典确实天生不支持重复键——后面的键值对会直接覆盖前面的,这就是你打印字典时只看到最后一组值的原因。不过要处理这种需要重复键的表单提交,有几个实用的解决方案:

方法1:直接使用元组列表(推荐给用requests库的场景)

如果你是用requests发送POST请求,直接传一个元组列表就可以完美解决问题。requests会自动把相同的键拆分成多个FormData参数:

import requests

# 构造包含重复键的元组列表
form_data = [
    ('evt', '2001'),
    ('evt', '1024001'),
    ('src', 'mstrWeb.my.fbb.fb.2001'),
    ('src', 'mstrWeb.my.fbb.1024001')
]

# 发送请求
response = requests.post('你的目标接口URL', data=form_data)

这样发送的请求里,FormData就会包含两组evt和两组src参数,完全符合你的需求。

方法2:手动拼接FormData字符串

如果是自己构造请求体,可以直接拼接成符合application/x-www-form-urlencoded格式的字符串:

form_data_str = "evt=2001&evt=1024001&src=mstrWeb.my.fbb.fb.2001&src=mstrWeb.my.fbb.1024001"

# 发送请求时记得设置Content-Type头
import requests
response = requests.post(
    '你的目标接口URL',
    data=form_data_str,
    headers={'Content-Type': 'application/x-www-form-urlencoded'}
)

方法3:用字典存储多值(适合需要先处理数据的场景)

如果需要先把数据存在类似字典的结构里,可以用collections.defaultdict把每个键对应的值存成列表,之后再转成requests需要的格式:

from collections import defaultdict
import requests

# 用defaultdict存储多值
multi_value_dict = defaultdict(list)
multi_value_dict['evt'].append('2001')
multi_value_dict['evt'].append('1024001')
multi_value_dict['src'].append('mstrWeb.my.fbb.fb.2001')
multi_value_dict['src'].append('mstrWeb.my.fbb.1024001')

# 转成元组列表
form_data = []
for key, values in multi_value_dict.items():
    for val in values:
        form_data.append((key, val))

# 发送请求
response = requests.post('你的目标接口URL', data=form_data)

总的来说,方法1是最简洁且符合requests设计的方案,推荐优先使用。

内容的提问来源于stack exchange,提问作者Shekhar Samanta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:26:34