【问题标题】:Python dictionary of lists maximum based on on 3rd element from list基于列表中第三个元素的列表最大 Python 字典
【发布时间】:2025-12-03 04:35:01
【问题描述】:

我有一本列表字典

 h={'1':['a','3','56'],'2':['a','2','125']}

我想根据h[k] 的第三个元素获取最大值的键和值,即(2,125)

我试图理解lambda函数并写了这个:

 max(h, key=lambda h : int(h[k][2]) for k in h.keys())

但它给了我一个SyntaxError 错误。

【问题讨论】:

  • 你的问题不是很清楚。你能解释一下吗?为什么只考虑2125
  • @thefourtheye 因为 125 大于 56,并且它在键为“2”的列表中
  • 我忘了在这里转换成int

标签: python list dictionary lambda max


【解决方案1】:

对于 Python 2.7,您可以执行以下操作:

max(h.iteritems(), key=lambda (k,v):int(v[2]))

这将为您提供相应的键和值作为元组。这也假设您想将这些值解释为整数(并且不尝试处理您的数据没有有效转换为整数的情况)。如果您想根据 lex 排序确定“最大值”,只需删除 lambda 函数中的 int 强制转换即可。

如果您使用的是 Python 3,这大致相当于:

max(h.items(), key=lambda kv:int(kv[1][2]))

【讨论】:

    【解决方案2】:

    有一些错误。最近的修正可以是:-

    >>> max(h, key=lambda k : h[k][2])
    '1'
    >>> h={'1':['a','3','56'],'2':['a','2','125']}
    >>> max(h, key=lambda k : int(h[k][2]))
    '2'
    >>> maxval = max(h, key=lambda k : int(h[k][2]))
    >>> h[maxval]
    ['a', '2', '125']
    

    错误可以列为

    • 为每个条目评估密钥,因此您不需要有 for 循环
    • lambda 函数与 lambda args: returnvalue 一样工作,因此您的 `lambda 函数在语义上不正确

    除此之外,您正在按字典顺序进行比较,因此'125' 小于'56',因此您需要在签出它们之前将它们转换为int 类型。

    要获得准确的输出,您可以这样做

    >>> print("{},{}".format(int(maxval),h[maxval]))
    2,['a', '2', '125']
    

    【讨论】:

      最近更新 更多