Python 列表字典最大值基于列表中的第 3 个元素

Python dictionary of lists maximum based on on 3rd element from list

我有一个列表字典

 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 错误。

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

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

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

如果你在Python3,这大致相当于:

max(h.items(), key=lambda kv:int(kv[1][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']