您可以使用列表推导式:
t = [{'a': 1.0, 'b': 2.0},
{'a': 3.0, 'b': 4.0},
{'a': 5.0, 'b': 6.0},
{'a': 7.0, 'b': 9.0},
{'a': 9.0, 'b': 0.0}]
new_list = [i["a"] for i in t]
输出:
[1.0, 3.0, 5.0, 7.0, 9.0]
由于这个解决方案使用了一个for循环,你可以改用map
:
x = list(map(lambda x: x["a"], t))
输出:
[1.0, 3.0, 5.0, 7.0, 9.0]
从性能角度考虑,你更倾向于使用列表解析方案而不是映射方案。
>>> timeit('new_list = [i["a"] for i in t]', setup='from __main__ import t', number=10000000)
4.318223718035199
>>> timeit('x = list(map(lambda x: x["a"], t))', setup='from __main__ import t', number=10000000)
16.243124993163093
def temp(p):
return p['a']
>>> timeit('x = list(map(temp, t))', setup='from __main__ import t, temp', number=10000000)
16.048683850689343
使用lambda表达式和普通函数略有不同,但是推导式的执行时间只需要1/4。
list(map ...)
+lambda
不如使用推导式。当你需要在map
中使用lambda
时,更好的选择是使用推导式。 - Jean-François Fabredef something(): pass
)的map
实际上比列表推导式更快,因为函数something
已经预先声明。 - Ajax1234