假设我有一个对象列表,并且我想为每个对象创建一个字典,并将生成的所有字典放在一个列表中。
我正在做的是以下事情:
Reflect_Value(TestStringName, StringValue)
我想知道是否有比我提议的字典更有效(更快)的方法来创建字典列表。
谢谢。
答案 0 :(得分:2)
由于您正在处理HTTP请求(这在您的问题中并不明显),其余答案无关紧要:通信将以绝对优势支配计算。无论如何,在这里回答。
原始方法似乎是最慢的:
In [20]: %%timeit
...: list_of_dict = []
...: for x in xlist:
...: list_of_dict.append(f(x))
...:
13.5 µs ± 39.3 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
映射是最好的选择:
In [21]: %timeit list(map(f,xlist))
8.45 µs ± 17 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
列表理解位于中间位置:
In [22]: %timeit [f(x) for x in xlist]
10.2 µs ± 22.8 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
答案 1 :(得分:-1)
由于您在注释中提到要整体上更快地执行,也许不同步请求?
查看以下博客文章改编的示例:http://skipperkongen.dk/2016/09/09/easy-parallel-http-requests-with-python-and-asyncio/
import asyncio
import requests
async def main():
xlist = [...]
list_of_dict = []
loop = asyncio.get_event_loop()
futures = [
loop.run_in_executor(
None,
requests.get,
i
)
for i in xlist
]
for response in await asyncio.gather(*futures):
respons_dict = your_parser(response) # Your parsing to dict from before
list_of_dict.append(response_dict)
return list_of_dict
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
我认为这可以帮助您实现并行性。只是请注意,您应该确保不会向其他人提出他们不满意的要求。