【问题标题】:key corresponding to maximum value in python dictionary对应于python字典中最大值的键
【发布时间】:2011-03-08 01:21:54
【问题描述】:
a = dict(((1,3),(0,-1),(3,21)))
m = max(a, key=a.get)

有人可以解释一下为什么这会返回对应于最大值的键吗?这让我难倒了好一阵子。谢谢!

【问题讨论】:

    标签: python


    【解决方案1】:

    字典“a”是python中的可迭代结构。当您使用for x in a 循环时,您正在遍历字典中的键。

    在第二行中,max 函数有两个参数:一个可迭代对象 (a) 和一个可选的“key”函数。 Key 函数将用于评估 a 中项目的值——将返回其中最大的项目。

    例子:

    >>> a = dict(((1,3),(0,-1),(3,21)))
    >>> for x in a:
    ...     print x #output the value of each item in our iteration
    ... 
    0
    1
    3
    

    注意这里只输出“键”。当我们将这些键中的每一个传递给“get”时......

    >>> a.get(0)
    -1
    >>> a.get(1)
    3
    >>> a.get(3)
    21
    

    我们得到每个键的值。现在看看 max 是如何工作的。

    >>> b=[2, 3, 5, 6, 4]
    >>> max(b)
    6
    >>> def inverse(x):
    ...     return 1.0 / x
    ... 
    >>> max(b, key=inverse)
    2
    

    如您所见,max(默认情况下)只会在我们的可迭代列表中找到最大的数字。如果我们定义“逆”函数,它会返回 b 中 inverse(item) 最大的最大项。

    结合这两项,我们看到max(a, key=a.get) 将返回aa.get(item) 的值最大的item。即最大值对应的key。

    【讨论】:

    • 如果你真的感兴趣,你也可以尝试使用 lambda 函数:max(a, key=lambda x: a[x])
    【解决方案2】:

    您是在问key 参数是如何工作的吗?它需要一个可调用的,它应用于字典中的每个元素。对于您的字典,它只是这样做:

    a.get(1)  # 3
    a.get(0)  # -1
    a.get(3)  # 21
    

    max然后将key函数的结果作为比较值,那么它显然会选择返回最高值的元素,即3。

    【讨论】:

      猜你喜欢
      • 2021-09-13
      • 2019-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-19
      • 2020-03-16
      • 2016-02-20
      相关资源
      最近更新 更多