有没有一种方法可以有效地比较python中的两个dict列表?

有没有一种方法可以有效地比较python中的两个dict列表?,python,performance,list,filter,compare,Python,Performance,List,Filter,Compare,我有两本字典的目录。第一个列表包含以x、y、z和半径表示的球体定义。第二个列表包含空间中的各种点,如x、y、z。这些列表都很长,因此迭代每个列表并与所有值进行比较是低效的 我一直在尝试map和reduce术语,但它们在过滤函数中只使用了一个术语。我使用的是以下内容: for curNode in nodeList: for i in sphereList: tmpRad = findRadius(i, curNode)

我有两本字典的目录。第一个列表包含以x、y、z和半径表示的球体定义。第二个列表包含空间中的各种点,如x、y、z。这些列表都很长,因此迭代每个列表并与所有值进行比较是低效的

我一直在尝试map和reduce术语,但它们在过滤函数中只使用了一个术语。我使用的是以下内容:

      for curNode in nodeList:
            for i in sphereList:
                    tmpRad = findRadius(i, curNode)
                    if float(tmpRad) <= float(i['radius']):
                            print "Remove node", curNode['num']
                            nodeRemovalList.append(curNode['num'])
                            break
节点列表中curNode的
:
对于sphereList中的我:
tmpRad=findRadius(i,curNode)

如果使用float(tmpRad)您可能需要研究一些方法,例如减少您必须检查每个点的球体数量。

尝试以下方法:

def in_sphere(node):
    return any(float(findRadius(sphere, node)) <= float(sphere['radius']) 
               for sphere in sphereList)

nodeRemovalList = filter(in_sphere, nodeList)
def在球(节点)中:

返回any(float(findRadius(sphere,node))您是否试图检测哪些点位于球体内。在numpy中使用基于矩阵的方法可能更容易,因为您可以有效地为所有点生成3d距离向量,让p=点(x1,y1,z1)。假设一个是圆心阵列,那么距离向量阵列就可以通过计算机进行计算,并与numpy中的半径阵列进行比较。你会发现矩阵运算比迭代更快。

我正在尝试检测球体内的点。我没有考虑使用矩阵计算。构建sp矩阵可能更有用、更有效这里是一个节点矩阵,比较一下。谢谢。这里有类型转换,因为我在初始读取时没有做过类型转换。我从一个txt文件中获取数据,所以它被解析为字符串。我现在已经做了更正。谢谢关于代码的建议。