【问题标题】:Python: count repeated elements in a list, get key with maximal count, break ties in favor of numerically highest key [duplicate]Python:计算列表中的重复元素,获取最大计数的键,打破平局以支持数字最高的键[重复]
【发布时间】:2022-01-04 07:49:54
【问题描述】:

这是我的代码

from collections import Counter
py = [1,3,2,1,3,3,3,1,2,1]
a = dict(Counter(py))
print(a)

输出是 {1: 4, 3: 4, 2: 2} 我想要最大值,但问题是当值介于两个值之间时,我想要代表键的值 在这种情况下如何获得第二个密钥3

【问题讨论】:

  • 什么意思,你想要一个决胜局?
  • 三个键绑定最大值怎么办?
  • "value代表键" 不是语法英语,我认为您的意思是 "key 给出最大计数,通过返回(数字上)最大键来打破平局".此外,在您的情况下,我们可以假设所有键都是整数。

标签: python counter


【解决方案1】:

您可以使用max() 函数并使用key 参数获取结果。

max(c.items(), key= lambda x: (x[1],x[0]))

这将首先找到频率最大的元素,然后在这些元素中找到具有最大值的元素。所以在这种情况下,它将是(3,4)

from collections import Counter
lst = [1,3,2,1,3,3,3,1,2,1]

c = Counter(lst)
print(max(c.items(), key= lambda x: (x[1],x[0])))

输出:

(3, 4)

【讨论】:

  • print(max(a, key=lambda x:(a.get(x), x)))
  • 这是最好的结果
【解决方案2】:

你可以直接使用collections.Countermost_common方法结合max反转元组:

d = Counter(py)
max(d.most_common(), key=lambda e: e[::-1])

输出:(3, 4)

使用字典,需要使用items方法:

d = dict(Counter(py))
max(d.items(), key=lambda e: e[::-1])

另一种方法,zip 值和键以优先于值执行最大值,并反转输出:

max(zip(d.values(),d))[::-1]

输出:(3, 4)

【讨论】:

    【解决方案3】:

    你可以先在字典中的值中找到最大值:

    max(a.values())
    

    这样,您可以遍历字典并过滤所有值不等于最大值的键:

    max_a = dict(filter(lambda elem: elem[1] == max(a.values()), a.items()))`
    

    【讨论】:

      【解决方案4】:

      python 中的内置 max 函数采用 key 参数,它基本上告诉它如何比较值 -

      在你的情况下,你需要想出一些方法让(3, 4) 大于(1, 4) - 事实证明这是默认行为

      所以,简单

      d = {1: 4, 3: 4, 2: 2}
      max(d.items())
      # (3, 4)
      

      会给你正确的结果。

      但是,或者,仅作为示例 -

      max(d.items(), key=lambda x: int(str(x[0]) + str(x[1])))
      # (3, 4)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-25
        • 1970-01-01
        • 2023-03-11
        • 2016-05-12
        • 1970-01-01
        • 2011-05-07
        相关资源
        最近更新 更多