Return 键对应于字典中第三个值最小的元组

Return key corresponding to the tuple with smallest third value from dictionary

我正在尝试 return 与元组字典中具有最小第三索引值的元组对应的键(一个 namedtuple 顶点作为键,一个具有 3 个元素的元组作为值)。

例如,假设我有元组:

vertex = namedtuple("Vertex", ["vertex_id", "vertex_x", "vertex_y"])
d = {vertex(vertex_id='B', vertex_x=11, vertex_y=0): (4, 5, 9), 
        vertex(vertex_id='C', vertex_x=6, vertex_y=0): (2, 0, 2), 
        vertex(vertex_id='A', vertex_x=4, vertex_y=0): (0, 2, 3)}

我需要一些东西 return 我 Vertex(vertex_id='C', vertex_x=6, vertex_y=0)。我正在尝试类似 min(d.values(), key = lambda t: t[2]) 的东西(但是这个 return 是元组 (2, 0, 2) 并且我必须将它追溯到它的键)或 min(d, key = lambda t: t[2]) (这不是真的工作)。

是否有更好的方法来设置 min() 来执行此操作,或者我是否必须追溯与第一种方法给我的值对应的键?如果我在使用更大的词典时不必搜索它会更有效率。

字典不适合那样使用。您不应尝试将值追溯到键。
试试这个:

keys = list(d.keys())
k = keys[0]
m = d[k]
for v in keys[1:]:
    if d[v][2] < m[2]:
        k = v
        m = d[k]

你想要的顶点键在k中。

min() 与自定义 key= 函数结合使用。您可以在 d.items():

的元组中搜索最小值
print( min(d.items(), key=lambda k: k[1][2])[0] )

打印:

Vertex(vertex_id='C', vertex_x=6, vertex_y=0)

如果您不强制使用字典,我认为下面的代码是正确的方法。
无论如何 - 你可以看到一个现代的 NamedTuple 例子。

from typing import NamedTuple

class Vertex(NamedTuple):
  id:str
  x:int
  y:int

class Triple(NamedTuple):
  first:int
  second:int
  third:int

class Pair(NamedTuple):
  vertex: Vertex
  triple: Triple


pairs = [Pair(Vertex('B',11,0),Triple(4,5,9)),Pair(Vertex('C',6,0),Triple(2,0,2)),Pair(Vertex('A',4,0),Triple(0,2,3))]
_min = min(pairs,key=lambda p: p.triple.third)
print(_min.vertex)