【问题标题】:How to get multiple max key values in a dictionary?如何在字典中获取多个最大键值?
【发布时间】:2021-01-17 14:56:38
【问题描述】:

假设我有一本字典:

data = {'a':1, 'b':2, 'c': 3, 'd': 3}

我想获取字典中的最大值。到目前为止,我一直在做:

max(zip(data.values(), data.keys()))[1]

但我知道我可能会丢失另一个最大值。解决此问题的最有效方法是什么?

【问题讨论】:

    标签: python python-2.7


    【解决方案1】:

    根据您的示例,您似乎正在寻找 映射到最大值的键。您可以使用列表推导:

    [k for k, v in data.items() if v == max(data.values())]
    # ['c', 'd']
    

    如果您的字典很大,请将其分成两行以避免计算尽可能多的项目的最大值:

    mx = max(data.values())
    [k for k, v in data.items() if v == mx]
    

    在 Python 2.x 中,您将需要 .iteritems()

    【讨论】:

    • 我认为你不需要.iteritems()。 (我在 Python 2.7 上)
    • @user405892 我想它可能不需要,但可能更节省内存? stackoverflow.com/questions/10458437/…
    • 啊,不知道。是的,那么使用它可能会更好。
    【解决方案2】:

    您可以尝试在defaultdict 中收集反向value -> key 对,然后输出具有最高键的值:

    from collections import defaultdict
    
    def get_max_value(data):
        d = defaultdict(list)
        for key, value in data.items():
            d[value].append(key)
        return max(d.items())[1]
    

    哪些输出:

    >>> get_max_value({'a':1, 'b':2, 'c': 3, 'd': 3})
    ['c', 'd']
    >>> get_max_value({'a': 10, 'b': 10, 'c': 4, 'd': 5})
    ['a', 'b']
    

    【讨论】:

      【解决方案3】:

      首先,找出字典中出现的最大值是多少。如果您尝试创建所有最大值的列表,请尝试以下操作:

          data = {'a':1, 'b':2, 'c': 3, 'd': 3}
          max_value = data.get(max(data))
          list_num_max_value = []
          for letter in data:
            if data.get(letter) == max_value:
              list_num_max_value.append(max_value)
          print (list_num_max_value)
      

      如果您不想这样做,请告诉我,我将指导您完成正确的流程。

      【讨论】:

        猜你喜欢
        • 2010-09-21
        • 2021-09-13
        • 1970-01-01
        • 1970-01-01
        • 2019-03-20
        • 2012-01-09
        • 1970-01-01
        • 2022-12-02
        相关资源
        最近更新 更多