如何解决如何通过字符串并变成字典
我有一个看起来像这样的字符串:
“ buyer = Bob&seller = Jan&id_a = 234”
我想将其转换为字典:
{“买方”:“鲍勃”,“卖方”:“简”,“ id_a”:234}
但是,该字符串可以以任何顺序出现,因此它也可能看起来像这样“ seller = Jan&buyer = Bob&id_a = 234”。当然,这应该仍然导致相同的字典。
如何在python中轻松做到这一点?我最初使用的是.split(),但是当我意识到有多种可能的排序方式时,我将不得不创建一个超级凌乱的解决方案来适应这种情况。有什么想法吗?
解决方法
parse_qs
将解析作为字符串参数给出的查询字符串(类型为application / x-www-form-urlencoded的数据),并将数据作为字典返回。字典键是唯一的查询变量名称,值是每个名称的值列表。
>>> import urllib.parse
>>> urllib.parse.parse_qs("buyer=Bob&seller=Jan&id_a=234")
{'buyer': ['Bob'],'seller': ['Jan'],'id_a': ['234']}
您还可以使用urllib.parse.parse_qsl
,它将解析作为字符串参数给出的查询字符串(类型为application / x-www-form-urlencoded的数据)并返回名称,值对的列表。
>>> urllib.parse.parse_qsl("buyer=Bob&seller=Jan&id_a=234")
[('buyer','Bob'),('seller','Jan'),('id_a','234')]
,
不是最漂亮的方法,但是应该可以完成工作。
example="buyer=Bob&seller=Jan&id_a=234"
pairs = example.split("&")
result = {}
for pair in pairs:
key,value = pair.split("=")
if value.isnumeric():
result[key]=float(value)
else:
result[key]=value
我敢肯定,肯定有更好的方法可以做到这一点,这是一种快速而又肮脏的方法。
,如果您想使用“基本” Python来执行此操作,而没有查询字符串解析库,我们可以尝试使用re.findall
:
inp = "buyer=Bob&seller=Jan&id_a=234"
matches = re.findall(r'([^=&]+)=([^=&]+)',inp)
dict_1 = dict()
for key,value in matches:
dict_1.setdefault(key,[]).append(value)
print(dict_1)
此打印:
{'buyer': ['Bob'],'id_a': ['234'],'seller': ['Jan']}
,
您有许多键值对,它们之间全部用&
隔开。键和值本身用=
分隔。这听起来像是string.split()
的理想用例:
input_string = "buyer=Bob&seller=Jan&id_a=234&other=abc=7"
my_dict = {}
for keyval in input_string.split("&"):
(key,val) = keyval.split("=",1)
my_dict[key] = val
print(my_dict)
输出为:
{'buyer': 'Bob','seller': 'Jan','id_a': '234','other': 'abc=7'}
这首先将整个键/值集拆分为单独的键/值项,然后分别提取键和值,并将其添加到字典中。输入字典中键/值项的重新排序没有问题,因为字典未排序。
唯一的“偷偷摸摸”的位是限制键/值的分割,以确保只有 first =
字符才是分割的字符。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。