>>> votes ={}
>>> votes["maddy"]=6
>>> votes["katty"]=6
>>> votes
{'maddy': 6, 'katty': 6}
>>> print(max(votes.items(), key = lambda k:k[1]))
('maddy', 6)
>>> votes["jackie"]=1
>>> votes
{'maddy': 6, 'katty': 6, 'jackie': 1}
>>> votes["kavi"]=1
>>> votes
{'maddy': 6, 'katty': 6, 'jackie': 1, 'kavi': 1}
>>> print(min(votes.items(), key = lambda k:k[1]))
('jackie', 1)
>>>
我知道无论我们首先插入带有最大值的项目是什么,都将是 被视为最大票数,如下所示,但如果我需要最大值怎么办 如 值为 6 的 Katty 键,插入在具有相同值的 Maddy 键之后 值 6 ?
print(max(votes.items(), key = lambda k:k[1]))
('maddy', 6)
expected output is
Katty , 6
根据max
文档:
如果多个项目最多,则该函数返回遇到的第一个项目。
此外,您的代码还取决于 .items()
返回的元素的顺序。自 Python3.7 以来,dict
保证了插入顺序(在此处阅读更多相关信息(。如果您的版本低于 3.7,并且您希望保持元素的插入顺序,则可以使用 OrderedDict
。
如果要返回具有最大值/最小值的最新元素,可以在键中显式指定顺序:
In [1]: votes = {'maddy': 6, 'katty': 6}
In [2]: max(votes.items(), key=lambda x: x[1])
Out[2]: ('maddy', 6)
In [3]: max(enumerate(votes.items()), key=lambda x: (x[1][1], x[0]))
Out[3]: (1, ('katty', 6))
In [4]: max(enumerate(votes.items()), key=lambda x: (x[1][1], x[0]))[1]
Out[4]: ('katty', 6)
请注意,对于min
,您需要在 key 函数中否定索引以检索最新元素。这是使具有索引的元素(例如(比具有索引 2 的元素低 3 所必需的。否定索引后,您将比较 -3 与 -2,-3 将低于 -2,因此min
将返回具有较高索引的元素:
In [5]: votes = {'maddy': 6, 'katty': 6, 'a': 1, 'b': 1}
In [6]: min(enumerate(votes.items()), key=lambda x: (x[1][1], -x[0]))[1]
Out[6]: ('b', 1)
或者您可以颠倒项目的顺序:
In [7]: max(reversed(list(votes.items())), key=lambda x: x[1])
Out[7]: ('katty', 6)