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)
你不想迭代你已经拆分的东西,只需将它包装在一个迭代中,就像一个元组:
>>> 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是'='符号的结果.
或使用map和lambda:
>>> 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'].
| 归档时间: |
|
| 查看次数: |
135 次 |
| 最近记录: |