我有一个大字典src(最多1M个项目),我想取N个(典型值为N = 10K-20K)项目,将它们存储在一个新的字典中dst,仅将其余项目保留在中src。拿走N个项目都没关系。我正在寻找在Python 3.6或3.7上最快的方法。
到目前为止,我发现的最快方法是:
src = {i: i ** 3 for i in range(1000000)}
# Taking items 1 by 1 (~0.0059s)
dst = {}
while len(dst) < 20000:
item = src.popitem()
dst[item[0]] = item[1]
Run Code Online (Sandbox Code Playgroud)
有更好的吗?即使是边际收益也将是好的。
当我创建新的远程 Python 解释器时,IntelliJ 没有找到我的代码的任何依赖项,并且似乎没有索引任何库。大部分代码是红色的。我想我已经指出“类路径”完全是空的,这与我添加的其他一些 Python SDK(本地 SDK)不同。有时,我可以通过在界面中单击来使其使用指向 IntelliJ Caches 目录的路径填充类路径,但大多数时候它不起作用,并且我无法重现如何使其工作。如何确保正确填充类路径?
我使用的是 IntelliJ Ultimate 版本 2016.2.1。使用Python插件版本2016.2.162.43。我正在 Vagrant 虚拟机上进行开发,并添加了一个位于虚拟机内的虚拟环境 (venv) 内的 Python 远程解释器。当我添加远程解释器时,我使用:
然后类路径如下所示:https://www.dropbox.com/s/3xbzopb4y9bhn0u/Screenshot%202016-08-11%2017.19.43.png?dl=0并且 IntelliJ 无法识别任何库/内置程序。对于其他 SDK,类路径包含多个名称中带有 remote_sources、python_stubs 或 python-sculpts 的条目,并且它们可以工作。
我正在使用Python 3 asyncio框架评估不同的模式以定期执行(实际的睡眠/延迟以简化),我有两段代码表现得很差,我无法解释原因.yield from正如我所料,第一个版本用于递归调用自身耗尽大约1000次迭代的堆栈.第二个版本递归调用协程,但委托实际的事件循环执行到asyncio.async并且不会耗尽堆栈.你能详细解释为什么第二个版本没有使用堆栈吗?执行此协程的两种方式有什么区别?
第一版(收益率):
@asyncio.coroutine
def call_self(self, i):
print('calling self', i)
yield from self.call_self(i + 1)
Run Code Online (Sandbox Code Playgroud)
第二个版本(asyncio.async):
@asyncio.coroutine
def call_self(self, i):
print('calling self', i)
asyncio.async(self.call_self(i + 1))
Run Code Online (Sandbox Code Playgroud)