get python dictionary from string containing key value pairs

后端 未结 3 2097
我在风中等你
我在风中等你 2020-12-03 00:19

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 th

相关标签:
3条回答
  • 2020-12-03 00:50
    >>> r = "name: srek age :24 description: blah blah"
    >>> import re
    >>> regex = re.compile(r"\b(\w+)\s*:\s*([^:]*)(?=\s+\w+\s*:|$)")
    >>> d = dict(regex.findall(r))
    >>> d
    {'age': '24', 'name': 'srek', 'description': 'blah blah'}
    

    Explanation:

    \b           # 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
    
    0 讨论(0)
  • 2020-12-03 00:59

    without re:

    r = "name: srek age :24 description: blah blah cat: dog stack:overflow"
    lis=r.split(':')
    dic={}
    try :
     for i,x in enumerate(reversed(lis)):
        i+=1
        slast=lis[-(i+1)]
        slast=slast.split()
        dic[slast[-1]]=x
    
        lis[-(i+1)]=" ".join(slast[:-1])
    except IndexError:pass    
    print(dic)
    
    {'age': '24', 'description': 'blah blah', 'stack': 'overflow', 'name': 'srek', 'cat': 'dog'}
    
    0 讨论(0)
  • 2020-12-03 00:59

    Other variation of Aswini program which display the dictionary in original order

    import os
    import shutil
    mystr = "name: srek age :24 description: blah blah cat: dog stack:overflow"
    mlist = mystr.split(':')
    dict = {}
    list1 = []
    list2 = []
    try:
     for i,x in enumerate(reversed(mlist)):
        i = i + 1
        slast = mlist[-(i+1)]
        cut = slast.split()
        cut2 = cut[-1]
        list1.insert(i,cut2)
        list2.insert(i,x)
        dict.update({cut2:x})
        mlist[-(i+1)] = " ".join(cut[0:-1])
    except:
     pass   
    
    rlist1 = list1[::-1]
    rlist2= list2[::-1]
    
    print zip(rlist1, rlist2)
    

    Output

    [('name', 'srek'), ('age', '24'), ('description', 'blah blah'), ('cat', 'dog'), ('stack', 'overflow')]

    0 讨论(0)
提交回复
热议问题