Help with parsing a list

Emile van Sebille emile at fenx.com
Wed Dec 16 18:05:42 EST 2009


On 12/16/2009 1:32 PM J said...
> Hi all,
> 
> I need some help in turning a list into a dictionary...
> 
> The list looks something like this:
> 
> ['key1: data1','key2: data2','key3: data3',' key4: ',' \tdata4.1','
> \tdata4.2',' \tdata4.3','key5: data5']
> 
> and it's derived from output (via subprocess.Popen) that in a terminal
> would look like this:
> 
> key1: data1
> key2: data2
> key3: data3
> key4:
>         data4.1
>         data4.2
>         data4.3
> key5: data5
> 
> So what I want to do is turn this into a dictionary that looks like this:
> 
> {'key1':'data1','key2':'data2','key3':'data3','key4':['data4.1','data4.2','data4.3'],'key5':'data5']

Sometimes brute force works fine...

 >>> data = ['key1: data1','key2: data2','key3: data3',' key4: ',' 
\tdata4.1','\tdata4.2',' \tdata4.3','key5: data5']
 >>>
 >>> D = {}
 >>>
 >>> for datum in data:
...     parts = [ d.strip() for d in datum.split(":") ]
...     if len(parts) == 2:
...         if not(parts[1]):
...             priorList = []
...             D[parts[0]] = priorList
...         else:
...             D[parts[0]] = parts[1]
...     else:
...         priorList.append(parts[0])
...
 >>> D
{'key3': 'data3', 'key2': 'data2', 'key1': 'data1', 'key5': 'data5', 
'key4': ['data4.1', 'data4.2', 'data4.3']}
 >>>




Flavor to taste,

Emile




> 
> So the problem I am having is just with the key 4 stuff... right now,
> I'm looking at something like this (pseudocode because I'm still
> trying to work this out)
> 
> loop through list
>   if item is 'flags'
>     make flags the key
>     add every following item until item + 1 does not start with \t
>   partition item where item[0] is key and item[2] is value
> 
> Sorry for not having actual code yet... I am still trying to work out
> how to handle this on paper before actually writing code.
> 
> And no, it's not a homework assignment ;-) just a small part of a
> project I'm working on.
> 
> Cheers,
> 
> Jeff
> 




More information about the Python-list mailing list