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
相关产品推荐
相关产品推荐

