小编Sta*_*ckG的帖子

快速查找给定列表中字典中的所有键

我有一个(可能很大的)字典和一个'可能'键列表.我想快速找到哪些键在字典中具有匹配值.我在这里这里找到了很多关于字典值的讨论,但没有讨论速度或多个条目.

我提出了四种方法,对于最有效的三种方法,我将它们的速度与下面不同的样本大小进行比较 - 有更好的方法吗?如果人们可以提出合理的竞争者,我也会对他们进行分析.

示例列表和词典的创建方式如下:

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)

python performance dictionary list

20
推荐指数
2
解决办法
273
查看次数

如何反转RDD.takeOrdered()的排序?

在Spark中反转RDD的takeOrdered()方法的顺序的语法是什么?

对于奖励积分,Spark中RDD的自定义排序语法是什么?

apache-spark rdd

13
推荐指数
2
解决办法
2万
查看次数

从Mechanize中的HTTPError中恢复

我正在为一些现有的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错误.

有没有人有这个好的解决方案?

 

解决方案(感谢下面的karnesJ.R):

下面一个很好的解决方案使用优秀的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)

python mechanize http-error

12
推荐指数
1
解决办法
1387
查看次数

在 AWS 实例上的 Docker 容器中使用 PyCharm 进行开发

我使用 PyCharm Professional 来开发 Python。

我能够将 PyCharm 运行/调试 GUI 连接到本地 Docker 映像的 python 解释器,并使用 Docker 容器 python 环境库运行本地代码,例如。通过此处描述的过程:通过 Docker 配置远程解释器

我还可以使用 PyCharm SSH 到 AWS 实例并连接到那里的远程 python 解释器,它将本地项目中的文件映射到远程目录,并再次允许我运行 GUI 单步执行远程代码,就像它是本地的一样,例如。通过此处描述的过程:通过 SSH 配置远程解释器

我在 Docker 集线器上有一个 Docker 映像,我想将其部署到 AWS 实例,然后将本地 PyCharm GUI 连接到远程容器内的环境,但我看不到如何执行此操作,有人可以帮助我吗?

[编辑] 一旦提出建议,将一个 SSH 服务器放在远程容器中,并通过 SSH 将我的本地 PyCharm 直接连接到容器中,例如这里描述的。这是一种解决方案,但在其他地方受到了广泛批评- 是否有更规范的解决方案?

python amazon-web-services pycharm docker

8
推荐指数
1
解决办法
1560
查看次数

使用SciKit-learn和SciPy进行K-Nearest-Neighbor构建/搜索的速度

我有一大堆二维点,并希望能够快速查询二维空间中任何点的k-最近邻居的集合.由于它是低维的,因此KD树似乎是一种很好的方法.我的初始数据集只会很少更新,所以查询点的时间对我来说比构建时更重要.但是,每次运行程序时,我都需要重新加载对象,因此我还需要一个可以快速保存和重新加载的结构.

现有的两个选择是SciPy和SciKit-learn中的KDTree结构.下面我分析了这两个中的两个,用于在大量列表长度上构建速度和查询速度.我还挑选了SciKit-learn结构并显示了从pickle重新加载对象的时间.这些在图中进行比较,下面包括用于生成时序的代码.

正如我在图中所示,从酸洗中加载比从头开始加载大N的半个数量级更快,这表明KDTree适合我的用例(即频繁重载但很少重新构建) ).

比较两个KD-Tree结构的构建,重载和查询时间

用于比较构建时间的代码:

# 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)

python kdtree nearest-neighbor scipy scikit-learn

6
推荐指数
1
解决办法
1184
查看次数

Firefox中的iPython Notebook - 警告:无响应的脚本

我在Firefox的iPython笔记本上运行了很长的脚本很长一段时间.我回来了,似乎已经挂了,所以我把它保存起来并关上了.

当我重新打开脚本时,弹出一个对话框,出现以下错误:

警告:无响应的脚本

此页面上的脚本可能正忙,或者堆栈溢出可能已停止响应.您可以立即停止脚本,在调试器中打开脚本,或让脚本继续.

选项包括"继续","停止脚本"和"调试脚本".单击其中任何一个导致相同的结果,对话框消失,iPython笔记本无响应(例如,ctrl + enter在当前单元格中创建换行符而不是执行它).

最糟糕的是,脚本底部的单元格似乎已被切断.它们包含一些看似已经消失的有价值的代码,这是一个非常糟糕的结果!

我试过回滚,但最后一个回滚点也显示了底部切断.这里的任何支持非常感谢!

python firefox ipython-notebook

4
推荐指数
1
解决办法
1626
查看次数