> 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") #2 and #3 can be ameliorated a bit by import string mydict = dict( map(string.strip,pair.split('=',1)) for pair in mylist if '=' in pair) which at least whacks whitespace off either end of your keys and values. #4 and #5 require a clearer definition of the problem. -tkc -- http://mail.python.org/mailman/listinfo/python-list