如何在Python中将包含键值的字符串列表映射到dict?

Joh*_*Doe 2 python functional-programming

我的列表包含以下元素:

>>> s = "foo a=b c=d e=f"
>>> s.split()
['set', 'a=b', 'c=d', 'e=f']
>>> splitted = s.split()
>>> splitted[1:]
['a=b', 'c=d', 'e=f']
Run Code Online (Sandbox Code Playgroud)

现在我想使用map来获得以下结果:

[{'a': 'b'}, {'c': 'd'}, {'e': 'f'}]
Run Code Online (Sandbox Code Playgroud)

我尝试了以下,但这给了我一个IndexError:

>>> map(lambda x : dict((a[0], a[1]) for a in x.split('=')) , splitted[1:])

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <lambda>
  File "<stdin>", line 1, in <genexpr>
IndexError: string index out of range
Run Code Online (Sandbox Code Playgroud)

jua*_*aga 5

你不想迭代你已经拆分的东西,只需将它包装在一个迭代中,就像一个元组:

>>> splitted
['a=b', 'c=d', 'e=f']
>>> [dict((x.split('='),)) for x in splitted]
[{'a': 'b'}, {'c': 'd'}, {'e': 'f'}]
Run Code Online (Sandbox Code Playgroud)

IE

(x.split('='),)
Run Code Online (Sandbox Code Playgroud)

是一个带有一个元素的元组,.split'='符号的结果.

或使用maplambda:

>>> list(map(lambda x: dict((x.split('='),)), splitted))
[{'a': 'b'}, {'c': 'd'}, {'e': 'f'}]
Run Code Online (Sandbox Code Playgroud)

我会说,这似乎是一个相当无用的数据结构.

要清楚,你的构造失败了,因为你的迭代太深了.生成器表达式:

(a[0], a[1]) for a in x.split('=')
Run Code Online (Sandbox Code Playgroud)

迭代x.split('='),在这种情况下总是一个包含两个元素的列表,长度为1的字符串,例如['a','b'].