problem of converting a list to dict
John Machin
sjmachin at lexicon.net
Wed Jan 9 15:26:33 EST 2008
On Jan 10, 7:12 am, Tim Chase <python.l... at tim.thechases.com> wrote:
> > mylist=['','tom=boss','mike=manager','paul=employee','meaningless']
>
> > I'd like to remove the first and the last item as they are irrevalent,
> > and convert it to the dict:
> > {'tom':'boss','mike':'manager','paul':'employee'}
>
> > I tried this but it didn't work:
>
> > mydict={}
> > for i in mylist[1:-1]:
> > a=i.split('=') # this will disect each item of mylist into a 2-item
> > list
> > mydict[a[0]]=a[1]
>
> > and I got this:
> > File "srch", line 19, in <module>
> > grab("a/tags1")
> > File "srch", line 15, in grab
> > mydict[mylist[0]]=mylist[1]
> > IndexError: list index out of range
>
> This can be rewritten a little more safely like
>
> mydict = dict(pair.split('=',1)
> for pair in mylist
> if '=' in pair)
>
> Some of John Machin's caveats still apply:
> (2) a[0] is empty or not what you expect (a person's name)
> (3) a[1] is empty or not what you expect (a job title)
> (consider what happens with 'tom = boss' ... a[0] = 'tom ', a[1] = '
> boss')
> (4) duplicate keys [...., 'tom=boss', 'tom=clerk', ...]
>
> to which I'd add
>
> (5) what happens if you have more than one equals-sign in your
> item? ("bob=robert=manager" or "bob=manager=big-cheese")
>
or "bob==manager"
ummm ... isn't more than one equals-sign covered by check #1: len(a)
== 2
?
More information about the Python-list
mailing list