Findall by Regex是否在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() 是否以随机顺序在我的字典中存储值......或打印()。我需要的是一种按顺序存储项目的方法,就像它们出现在字符串中一样......也许循环穿过它。任何建议将不胜感激,非常感谢

你的字典引入了无序性。Re.findall 按匹配顺序返回一个列表。对于您使用的模式,列表中的每个条目本身就是两个值的列表(嗯,一个元组),因为模式中有两个组。只需使用 re.findall 的返回值:

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'>
>>> 

最新更新