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

时间:2015-02-25 14:20:54

标签: python list dictionary lambda max

我有一份清单

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

2 个答案:

答案 0 :(得分:2)

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

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

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

如果您使用的是Python 3,则大致相同:

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

答案 1 :(得分:1)

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

>>> 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']