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']
我有一个列表字典
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']