Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.1k views
in Technique[技术] by (71.8m points)

get python dictionary from string containing key value pairs

i have a python string in the format:

str = "name: srek age :24 description: blah blah"

is there any way to convert it to dictionary that looks like

{'name': 'srek', 'age': '24', 'description': 'blah blah'}  

where each entries are (key,value) pairs taken from string. I tried splitting the string to list by

str.split()  

and then manually removing :, checking each tag name, adding to a dictionary. The drawback of this method is: this method is nasty, I have to manually remove : for each pair and if there is multi word 'value' in string (for example, blah blah for description), each word will be a separate entry in a list which is not desirable. Is there any Pythonic way of getting the dictionary (using python 2.7) ?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
>>> r = "name: srek age :24 description: blah blah"
>>> import re
>>> regex = re.compile(r"(w+)s*:s*([^:]*)(?=s+w+s*:|$)")
>>> d = dict(regex.findall(r))
>>> d
{'age': '24', 'name': 'srek', 'description': 'blah blah'}

Explanation:

           # Start at a word boundary
(w+)        # Match and capture a single word (1+ alnum characters)
s*:s*      # Match a colon, optionally surrounded by whitespace
([^:]*)      # Match any number of non-colon characters
(?=          # Make sure that we stop when the following can be matched:
 s+w+s*:  #  the next dictionary key
|            # or
 $           #  the end of the string
)            # End of lookahead

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...