26

我有一个看起来像这样的列表:

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

我想用'='分割这个列表,这样左边的所有东西都将成为键,而在右边,值。

{ 
    'abc':'lalalla',
    'appa':'kdkdkdkd',
    'kkakaka':'oeoeo'
}
4

5 回答 5

54
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

于 2012-10-05T05:18:29.987 回答
13

此外,确保将拆分限制为 1,以防右侧包含“=”。

d = dict(s.split('=',1) for s in a)
于 2013-01-03T21:18:56.187 回答
6
print dict([s.split("=") for s in my_list])

像这样

>>> 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'}
于 2012-10-05T05:17:19.963 回答
2

您可以将map对象直接提供给dict. 对于没有参数的内置函数,map应该表现出相似或更好的性能。引入参数时,您会看到性能下降:

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
于 2018-08-23T17:15:40.220 回答
1

使用map函数的示例

a = ["abc=lalalla", "appa=kdkdkdkd", "kkakaka=oeoeoeo"]
d = dict(map(lambda s: s.split('='), a))
于 2019-10-25T10:51:02.150 回答