为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

茅侃侃 2024-01-04 17:05:01
我试图从元组字典中返回与具有最小第三索引值的元组相对应的键(一个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() 来执行此操作,或者我是否必须追溯与第一种方法给我的值对应的键?如果我在使用较大的词典时不必搜索它,那么效率会更高。
查看完整描述

3 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

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)


查看完整回答
反对 回复 2024-01-04
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

字典不应该这样使用。您不应尝试将值追溯到键。

试试这个:


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


查看完整回答
反对 回复 2024-01-04
?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

如果您不强制使用字典,我认为下面的代码是正确的方法。

无论如何 - 你可以看到一个现代的 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)


查看完整回答
反对 回复 2024-01-04
  • 3 回答
  • 0 关注
  • 65 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信