Python 如何在搜索多个值的基础上返回字典键

Python 如何在搜索多个值的基础上返回字典键,python,dictionary,Python,Dictionary,一般来说,我对python和脚本编写还比较陌生,所以请耐心听我说 我有一个python字典,其中包含key:value对,其中的值是一个嵌套列表,其中包含三维几何体矩阵的位置: {Point_Index: [position_X, position_Y, position_Z]} 我应该提到,键是唯一的,但值不是唯一的 如何根据字典中的最高位置X、位置y和位置Z搜索字典并返回点索引键 以下是我的字典示例: Polygon1 = {0: [-3.1890000000000001, -3.1890

一般来说,我对python和脚本编写还比较陌生,所以请耐心听我说

我有一个python字典,其中包含key:value对,其中的值是一个嵌套列表,其中包含三维几何体矩阵的位置:

{Point_Index: [position_X, position_Y, position_Z]}
我应该提到,键是唯一的,但值不是唯一的

如何根据字典中的最高位置X、位置y和位置Z搜索字典并返回点索引键

以下是我的字典示例:

Polygon1 = {0: [-3.1890000000000001, -3.1890000000000001, -0.30361509588790281], 9: [3.1890000000000001, -3.1890000000000001, -0.30361509588790281], 10: [-3.1890000000000001, 3.1890000000000001, -0.30361509588790281], 11: [3.1890000000000001, 3.1890000000000001, -0.30361509588790281]}

我试图测试点的位置,以定位笛卡尔空间中给定向量中最外层的点。因此(max_X,max_Y,max_Z)可以被视为最右上方的点,而(min_X,max_Y,max_Z)可以被视为最左上方的点。最左下点为(min_X,min_Y,min_Z),最右下点为(max_X,min_Y,min_Z)

我尝试过各种方法,比如get,max,但我真的只是因为缺乏经验而在黑暗中跌跌撞撞


谢谢你的帮助

下面的Python示例应该可以解决您的问题

max( (v[0],k) for k,v in dictionary.items() )[1]
max( (v[1],k) for k,v in dictionary.items() )[1]
max( (v[2],k) for k,v in dictionary.items() )[1]
score = lambda x,y,z: x+y+z

best_key = max(
    mydict.iteritems(),
    key = lambda i:score(*i[1])
)[0]

您可以将
max
键一起使用
功能:

>>> Polygon1 = {0: [-3.1890000000000001, -3.1890000000000001, -0.30361509588790281], 9: [3.1890000000000001, -3.1890000000000001, -0.30361509588790281], 10: [-3.1890000000000001, 3.1890000000000001, -0.30361509588790281], 11: [3.1890000000000001, 3.1890000000000001, -0.30361509588790281]}
>>> max(Polygon1, key=lambda k: Polygon1[k][0])
9
>>> max(Polygon1, key=lambda k: Polygon1[k][1])
10
>>> max(Polygon1, key=lambda k: Polygon1[k][2])
0

请发布示例来说明您的问题,即一个包含少量点的字典,并指定所需的输出。简单的方法是使用一个tmp变量,存储具有最高X、Y、Z值的键名,以及包含当前最高值的tmp列表,并与其他变量进行比较。您可以通过一个简单的循环来实现这一点。它会起作用的。从这里,我们可以讨论优化。如果两个列表像这样
[12,10,20]
[4,20,15]
,比较的标准是什么?这个
Polygon1
的预期输出是什么?我试图测试点位置,以定位笛卡尔空间中给定向量的最外层点。因此(max_X,max_Y,max_Z)可以被视为最右上方的点,而(min_X,max_Y,max_Z)可以被视为最左上方的点。最左下点是(min_X,min_Y,min_Z),最右下点是(max_X,min_Y,min_Z)。@HughBothwell:对不起,我改了。X,Y,Z的总和可能不是匹配两个坐标的标准。@Ashwinichaudhar:是的;关键是标准已经从迭代中抽象出来了。如果他想根据不同的标准进行排序,他可以很容易地做到。我不确定这是否行得通。如果我有一个值为(2,2,-2)的点和一个值为(-2,2,2)的点,那么两个点返回的分数不一样吗?如果我误解了,很抱歉。@user1510490:是的,两者的分数相同。如果你能解释哪一个得分更好,我们就可以得到一个更好的得分函数。