我有一个(可能很大的)字典和一个'可能'键列表.我想快速找到哪些键在字典中具有匹配值.我在这里和这里找到了很多关于单字典值的讨论,但没有讨论速度或多个条目.
我提出了四种方法,对于最有效的三种方法,我将它们的速度与下面不同的样本大小进行比较 - 有更好的方法吗?如果人们可以提出合理的竞争者,我也会对他们进行分析.
示例列表和词典的创建方式如下:
import cProfile
from random import randint
length = 100000
listOfRandomInts = [randint(0,length*length/10-1) for x in range(length)]
dictionaryOfRandomInts = {randint(0,length*length/10-1): "It's here" for x in range(length)}
Run Code Online (Sandbox Code Playgroud)
方法1:'in'
关键字:
def way1(theList,theDict):
resultsList = []
for listItem in theList:
if listItem in theDict:
resultsList.append(theDict[listItem])
return resultsList
cProfile.run('way1(listOfRandomInts,dictionaryOfRandomInts)')
Run Code Online (Sandbox Code Playgroud)
32个函数调用0.018秒
方法2:错误处理:
def way2(theList,theDict):
resultsList = []
for listItem in theList:
try:
resultsList.append(theDict[listItem])
except:
;
return resultsList
cProfile.run('way2(listOfRandomInts,dictionaryOfRandomInts)')
Run Code Online (Sandbox Code Playgroud)
32个函数调用0.087秒
方法3:设置交集:
def …
Run Code Online (Sandbox Code Playgroud) 在Spark中反转RDD的takeOrdered()方法的顺序的语法是什么?
对于奖励积分,Spark中RDD的自定义排序语法是什么?
我正在为一些现有的python代码编写一个函数,该代码将作为参数传递给Mechanize浏览器对象.
我在浏览器中填写表格中的一些细节,并用于response = browser.submit()
将浏览器移动到新页面,并从中收集一些信息.
不幸的是,我偶尔会收到以下错误:
httperror_seek_wrapper: HTTP Error 500: Internal Server Error
我已经在我自己的浏览器中导航到该页面,果然,我偶尔会直接看到这个错误,所以我认为这是一个服务器问题,与robots.txt
标题或类似内容无关.
问题是提交后,browser
对象的状态发生了变化,我无法继续使用它.我首先想到的是先尝试采取深拷贝和使用,如果我遇到了问题,但提供了错误TypeError: object.__new__(cStringIO.StringO) is not safe, use cStringIO.StringO.__new__()
的描述在这里.
我也试过使用browser.back()
但得到NoneType
错误.
有没有人有这个好的解决方案?
下面一个很好的解决方案使用优秀的requests
库(这里的文档).requests
具有填写表单并通过post
或提交的功能get
,其中重要的是不会改变br
对象的状态.
一个优秀的网站允许我们测试各种错误代码,并在顶部有一个表单界面,我已经测试过它.我br
在这个站点创建一个对象,然后定义一个从中选择表单的函数br
,提取相关信息,但是通过提交requests
- 这样br
对象没有改变并且可以重复使用.错误代码导致requests
返回垃圾,但不会使br
不可用.
如下所述,这需要更多的设置时间,但非常值得.
import mechanize
import requests
def testErrorCodes(br,theCodes):
for x in theCodes:
br.select_form(nr=0) …
Run Code Online (Sandbox Code Playgroud) 我使用 PyCharm Professional 来开发 Python。
我能够将 PyCharm 运行/调试 GUI 连接到本地 Docker 映像的 python 解释器,并使用 Docker 容器 python 环境库运行本地代码,例如。通过此处描述的过程:通过 Docker 配置远程解释器。
我还可以使用 PyCharm SSH 到 AWS 实例并连接到那里的远程 python 解释器,它将本地项目中的文件映射到远程目录,并再次允许我运行 GUI 单步执行远程代码,就像它是本地的一样,例如。通过此处描述的过程:通过 SSH 配置远程解释器。
我在 Docker 集线器上有一个 Docker 映像,我想将其部署到 AWS 实例,然后将本地 PyCharm GUI 连接到远程容器内的环境,但我看不到如何执行此操作,有人可以帮助我吗?
[编辑] 一旦提出建议,将一个 SSH 服务器放在远程容器中,并通过 SSH 将我的本地 PyCharm 直接连接到容器中,例如这里描述的。这是一种解决方案,但在其他地方受到了广泛批评- 是否有更规范的解决方案?
我有一大堆二维点,并希望能够快速查询二维空间中任何点的k-最近邻居的集合.由于它是低维的,因此KD树似乎是一种很好的方法.我的初始数据集只会很少更新,所以查询点的时间对我来说比构建时更重要.但是,每次运行程序时,我都需要重新加载对象,因此我还需要一个可以快速保存和重新加载的结构.
现有的两个选择是SciPy和SciKit-learn中的KDTree结构.下面我分析了这两个中的两个,用于在大量列表长度上构建速度和查询速度.我还挑选了SciKit-learn结构并显示了从pickle重新加载对象的时间.这些在图中进行比较,下面包括用于生成时序的代码.
正如我在图中所示,从酸洗中加载比从头开始加载大N的半个数量级更快,这表明KDTree适合我的用例(即频繁重载但很少重新构建) ).
用于比较构建时间的代码:
# Profiling the building time for the two KD-tree structures and re-loading from a pickle
import math, timeit, pickle, sklearn.neighbors
the_lengths = [100, 1000, 10000, 100000, 1000000]
theSciPyBuildTime = []
theSklBuildTime = []
theRebuildTime = []
for length in the_lengths:
dim = 5*int(math.sqrt(length))
nTimes = 50
from random import randint
listOfRandom2DPoints = [ [randint(0,dim),randint(0,dim)] for x in range(length)]
setup = """import scipy.spatial
import sklearn.neighbors
length = """ + str(length) + """
dim = """ + …
Run Code Online (Sandbox Code Playgroud) 我在Firefox的iPython笔记本上运行了很长的脚本很长一段时间.我回来了,似乎已经挂了,所以我把它保存起来并关上了.
当我重新打开脚本时,弹出一个对话框,出现以下错误:
警告:无响应的脚本
此页面上的脚本可能正忙,或者堆栈溢出可能已停止响应.您可以立即停止脚本,在调试器中打开脚本,或让脚本继续.
选项包括"继续","停止脚本"和"调试脚本".单击其中任何一个导致相同的结果,对话框消失,iPython笔记本无响应(例如,ctrl + enter在当前单元格中创建换行符而不是执行它).
最糟糕的是,脚本底部的单元格似乎已被切断.它们包含一些看似已经消失的有价值的代码,这是一个非常糟糕的结果!
我试过回滚,但最后一个回滚点也显示了底部切断.这里的任何支持非常感谢!
python ×5
apache-spark ×1
dictionary ×1
docker ×1
firefox ×1
http-error ×1
kdtree ×1
list ×1
mechanize ×1
performance ×1
pycharm ×1
rdd ×1
scikit-learn ×1
scipy ×1