findall by regex是否在python字典中存储无序项?

2024-05-14 09:29:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串,其值的格式为key=value,用空格分隔,即

my_string = "a=1 b=10 z=234 h=5"

我需要的是使用正则表达式并将这些值存储在字典中;到目前为止,我已经做到了:

my_dict = dict(re.findall(r'(\S+)=(".*?"|\S+)', my_string))
print(my_dict)

问题是print不会按项目在字符串中出现的顺序打印项目。因此,由于我缺乏python调试知识,我不知道findall()是否以随机顺序存储字典中的值。。。或打印()。我需要的是一种按顺序存储项目的方法,就像它们在字符串中显示的那样。。。也许是骑车经过。任何建议都将不胜感激,非常感谢


Tags: 项目key字符串restring字典顺序value
2条回答

是你的格言导致了混乱。关于芬德尔按匹配项的顺序返回列表。对于您正在使用的模式,列表中的每个条目本身就是一个包含两个值的列表(也就是元组),因为您在模式中有两个组。只需使用关于芬德尔地址:

import re
my_string = "a=1 b=10 z=234 h=5"
matches = re.findall(r'(\S+)=(".*?"|\S+)', my_string)
print matches
for match in matches:
    print match

[('a', '1'), ('b', '10'), ('z', '234'), ('h', '5')]
('a', '1')
('b', '10')
('z', '234')
('h', '5')
>>> my_string
'a=1 b=10 z=234 h=5'
>>> import re
>>> "{"+re.sub(r'(\w+)=', r"'\1':", re.sub(r'\s+', ',', my_string))+"}"
"{'a':1,'b':10,'z':234,'h':5}"
>>> import ast
>>> ast.literal_eval("{"+re.sub(r'(\w+)=', r"'\1':", re.sub(r'\s+', ',', my_string))+"}")
{'a': 1, 'b': 10, 'h': 5, 'z': 234}
>>> type(ast.literal_eval("{"+re.sub(r'(\w+)=', r"'\1':", re.sub(r'\s+', ',', my_string))+"}"))
<class 'dict'>
>>> 

相关问题 更多 >

    热门问题