在 Python 字典中查找最频繁的值(具有最大计数的值)

新手上路,请多包涵

我正在尝试编写一个函数,该函数返回 Python 字典中出现次数最多的值。 我不想导入任何东西,只是简单的代码。

有任何想法吗?例如,如果我的字典是:

 input_dict = {'A': 1963, 'B': 1963,
    'C': 1964, 'D': 1964, 'E': 1964,
    'F': 1965, 'G': 1965, 'H': 1966,
    'I': 1967, 'J': 1967, 'K': 1968,
    'L': 1969 ,'M': 1969,
    'N': 1970}

预期结果是 1964 (因为它在 dict 中作为值出现了 3 次(最大计数))

这是我最后一次尝试:

 def most_prolific(input_dict):

    values = []
    for year in input_dict.values():
        if year in input_dict.values():
            values.append(year)

    for most in values:
        if most in values:
         return max(values.count(most))

原文由 Marcelo Taube 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

即使我建议你不需要导入任何东西,它的简单任务:

 input_dict = {'A': 1963, 'B': 1963,
    'C': 1964, 'D': 1964, 'E': 1964,
    'F': 1965, 'G': 1965, 'H': 1966,
    'I': 1967, 'J': 1967, 'K': 1968,
    'L': 1969 ,'M': 1969,
    'N': 1970}

track={}

for key,value in input_dict.items():
    if value not in track:
        track[value]=0
    else:
        track[value]+=1

print(max(track,key=track.get))

输出:

 1964

原文由 Aaditya Ura 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用 collections.Counter

实现此目的的最简单方法是使用 Python 的内置 collections.Counter 其创建目的相同。这是您的示例的示例代码:

 from collections import Counter
input_dict = {'A': 1963, 'B': 1963, 'C': 1964, 'D': 1964, 'E': 1964, 'F': 1965, 'G': 1965, 'H': 1966, 'I': 1967, 'J': 1967, 'K': 1968, 'L': 1969 ,'M': 1969, 'N': 1970}

value, count = Counter(input_dict.values()).most_common(1)[0]
# in above code, `value` will hold value `1964`  <--- one you desire
#            and `count` will hold value `3`

使用中间字典 (没有导入)

这是另一个 没有导入任何模块 的。在这里,我使用 dict 创建自己的计数器,如下所示:

 my_counter_dict = {}
for v in input_dict.values():
    my_counter_dict[v] = my_counter_dict.get(v, 0)+1

# Value hold by `my_counter_dict`:
#  {1963: 2, 1964: 3, 1965: 2, 1966: 1, 1967: 2, 1968: 1, 1969: 2, 1970: 1}

从上面的 dict 中,使用 max 函数提取具有最大值的键:

 >>> max(my_counter_dict.iterkeys(), key=my_counter_dict.get)
1964

不使用中间字典 (没有导入)

这是另一种不创建中间字典的替代方法,但由于 list.count 对于列表中的每个元素,列表的一次完整迭代导致效率相对较低:

 >>> values_list = list(input_dict.values())
>>> max(set(values_list), key=values_list.count)
1964

原文由 Moinuddin Quadri 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题