亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

返回字典中第三個值最小的元組對應的鍵

返回字典中第三個值最小的元組對應的鍵

茅侃侃 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 關注
  • 230 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號