猿问

返回字典中第三个值最小的元组对应的键

我试图从元组字典中返回与具有最小第三索引值的元组相对应的键(一个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)}

我需要一些东西来回报我Vertex(vertex_id='C', vertex_x=6, vertex_y=0)。我正在尝试类似的操作min(d.values(), key = lambda t: t[2])(但这会返回元组(2, 0, 2),我必须将其追溯到其密钥)或min(d, key = lambda t: t[2])(这实际上不起作用)。


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


茅侃侃
浏览 140回答 3
3回答

慕码人8056858

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)

慕码人2483693

字典不应该这样使用。您不应尝试将值追溯到键。试试这个:keys = list(d.keys())k = keys[0]m = d[k]for v in keys[1:]:&nbsp; &nbsp; if d[v][2] < m[2]:&nbsp; &nbsp; &nbsp; &nbsp; k = v&nbsp; &nbsp; &nbsp; &nbsp; m = d[k]你想要的顶点键将在 k 中。

沧海一幻觉

如果您不强制使用字典,我认为下面的代码是正确的方法。无论如何 - 你可以看到一个现代的 NamedTuple 示例。from typing import NamedTupleclass Vertex(NamedTuple):&nbsp; id:str&nbsp; x:int&nbsp; y:intclass Triple(NamedTuple):&nbsp; first:int&nbsp; second:int&nbsp; third:intclass Pair(NamedTuple):&nbsp; vertex: Vertex&nbsp; triple: Triplepairs = [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)
随时随地看视频慕课网APP

相关分类

Python
我要回答