list 2 dict?

Rob Williscroft rtw at rtw.me.uk
Sun Jan 2 08:56:06 EST 2011


Octavian Rasnita wrote in news:0DB6C288B2274DBBA5463E7771349EFB at teddy in
gmane.comp.python.general: 

> Hi,
> 
> If I want to create a dictionary from a list, is there a better way
> than the long line below? 
> 
> l = [1, 2, 3, 4, 5, 6, 7, 'a', 8, 'b']
> 
> d = dict(zip([l[x] for x in range(len(l)) if x %2 == 0], [l[x] for x
> in range(len(l)) if x %2 == 1])) 
> 
> print(d)
> 
> {8: 'b', 1: 2, 3: 4, 5: 6, 7: 'a'}

>>> dict( zip( l[ :: 2 ], l[ 1 :: 2 ] ) )
{8: 'b', 1: 2, 3: 4, 5: 6, 7: 'a'}

If you don't know about slice notation, the synatax I'm using above is:

    	list[ start : stop : step ]

where I have ommited the "stop" item, which defaults to the length of the
list.

<http://docs.python.org/library/stdtypes.html#sequence-types-str-unicode-
list-tuple-bytearray-buffer-xrange>

That will make 3 lists before it makes the dict thought, so if the
list is large:

>>> dict( ( l[ i ], l[ i + 1 ] ) for i in xrange( 0, len( l ), 2 ) )

may be better.

Rob.




More information about the Python-list mailing list