-2
   >>> 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)
    >>> 

我知道我们首先使用最大值插入的任何项目都将被视为最大票数,如下所示,但是如果我需要将最大值作为 katty 键,值为 6,插入到具有相同值 6 的 maddy 键之后怎么办?

    print(max(votes.items(), key = lambda k:k[1]))
 ('maddy', 6)

expected output is 
Katty , 6
4

1 回答 1

2

根据max文档

如果多个项目是最大的,该函数返回遇到的第一个。

此外,您的代码还取决于.items(). 保证自 Python3.7 以来的插入顺序(在此处dict阅读更多信息)。如果您的版本低于 3.7 并且您想保持元素插入顺序,您可以使用.OrderedDict

如果要返回具有 max/min 值的最新元素,可以在 key 中显式指定 order:

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 函数中取反索引以检索最新元素。这是使具有索引的元素(例如,3 低于具有索引 2 的元素)所必需的。在否定索引之后,您将 -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)
于 2019-06-08T09:03:53.297 回答