27

I have a list that looks like this:

[ 'abc=lalalla', 'appa=kdkdkdkd', 'kkakaka=oeoeoeo']

And I want to split this list by '=' so that everything on the left side will become keys and on the right, values.

{ 
    'abc':'lalalla',
    'appa':'kdkdkdkd',
    'kkakaka':'oeoeo'
}
Amelia N Chu
  • 139
  • 1
  • 4
  • 11
Vor
  • 30,519
  • 41
  • 129
  • 188

5 Answers5

56
a = [ 'abc=lalalla', 'appa=kdkdkdkd', 'kkakaka=oeoeoeo']
d = dict(s.split('=') for s in a)
print d


Output:
{'kkakaka': 'oeoeoeo', 'abc': 'lalalla', 'appa': 'kdkdkdkd'}

http://codepad.org/bZ8lGuHE

Demian Brecht
  • 20,736
  • 3
  • 40
  • 45
14

In addition, make sure you limit the splits to 1, in case the right-hand side contains an '='.

d = dict(s.split('=',1) for s in a)
user117529
  • 663
  • 8
  • 16
7
print dict([s.split("=") for s in my_list])

like this

>>> my_list = [ 'abc=lalalla', 'appa=kdkdkdkd', 'kkakaka=oeoeoeo']
>>> print dict(s.split("=") for s in my_list) #thanks gribbler
{'kkakaka': 'oeoeoeo', 'abc': 'lalalla', 'appa': 'kdkdkdkd'}
Joran Beasley
  • 103,130
  • 11
  • 146
  • 174
2

You can feed a map object directly to dict. For built-in functions without arguments, map should show similar or better performance. You will see a drop-off in performance when introducing arguments:

from functools import partial

L = ['abc=lalalla', 'appa=kdkdkdkd', 'kkakaka=oeoeoeo']
L2 = ['abc lalalla', 'appa kdkdkdkd', 'kkakaka oeoeoeo']

n = 100000
L = L*n
L2 = L2*n

%timeit dict(map(partial(str.split, sep='='), L))  # 234 ms per loop
%timeit dict(s.split('=') for s in L)              # 164 ms per loop

%timeit dict(map(str.split, L2))                   # 141 ms per loop
%timeit dict(s.split() for s in L2)                # 144 ms per loop
jpp
  • 147,904
  • 31
  • 244
  • 302
1

Example by using map function

a = ["abc=lalalla", "appa=kdkdkdkd", "kkakaka=oeoeoeo"]
d = dict(map(lambda s: s.split('='), a))
Vlad Bezden
  • 72,691
  • 22
  • 233
  • 168