如何基于搜索多个值返回字典键

时间:2012-07-08 20:01:20

标签: python dictionary

我对python和脚本编写起来相当新,所以请耐心等待......

我有一个python字典,其中包含键:值对,其中值是包含3d几何矩阵位置的嵌套列表:

{Point_Index: [position_X, position_Y, position_Z]}

我应该提到密钥是唯一的,但值不是。

如何搜索字典并根据字典中最高的position_X,position_y和Position_Z返回Point_Index键?

以下是我的词典示例:

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,但我真的只是因为经验不足而陷入困境。

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

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]

答案 1 :(得分:1)

您可以将maxkey功能一起使用:

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

答案 2 :(得分:0)

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

score = lambda x,y,z: x+y+z

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