【问题标题】:How to find multiple maximums in a dictionary如何在字典中找到多个最大值
【发布时间】:2018-05-23 23:53:39
【问题描述】:

尝试分析一些字符串并计算它们出现的次数。此数据存储在字典中。如果我要使用 max 函数,则只会打印遇到的第一个最高数字。

count = {"cow": 4, "moo": 4, "sheep": 1}
print(max(count.keys(), key=lambda x: count[x]))
cow

这将使奶牛成为最大值。如何让“cow”和“moo”都被打印出来

count = {"cow": 4, "moo": 4, "sheep": 1}
cow, moo

【问题讨论】:

    标签: python dictionary


    【解决方案1】:

    为什么不保持简单?

    mx = max(count.values())
    print([k for k, v in count.items() if v == mx])
    # ['cow', 'moo']
    

    第二行中括号内的表达式是list comprehension,本质上是for 循环的简写,它在一个类似列表的对象(“可迭代”)上运行,并在执行过程中创建一个新列表。在这种情况下,一个微妙之处在于有两个循环变量(kv)同时运行,它们的值由元组解包分配(.items() 一个接一个地返回对(键,值))。总结一下这里的列表推导大致相当于:

    result = []
    for k, v in count.items():
        if v == mx:
            result.append(k)
    

    但是列表推导会运行得更快,并且一旦你习惯了它也更容易阅读。

    【讨论】:

    • 谢谢!正在查看其他帖子,例如this,但他们似乎没有谈论超过一个最大值。对不起,我是新手!你能解释一下打印函数中的代码是如何工作的吗?
    【解决方案2】:

    只需将计数与defaultdict 分组,然后取最大值:

    from collections import defaultdict
    
    count = {"cow": 4, "moo": 4, "sheep": 1}
    
    d = defaultdict(list)
    for animal, cnt in count.items():
        d[cnt].append(animal)
    
    print(dict(d))
    # {4: ['cow', 'moo'], 1: ['sheep']}
    
    print(max(d.items())[1])
    # ['cow', 'moo']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-14
      • 1970-01-01
      • 1970-01-01
      • 2020-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多