我有一份清单
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
错误。
答案 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']