在Python字典中查找最常见的值(最大计数值)

时间:2018-02-04 09:01:01

标签: python dictionary

我正在尝试编写一个函数,它返回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))

4 个答案:

答案 0 :(得分:2)

使用collections.Counter

实现这一目标的最简单方法是使用Python的内置collections.Counter,它是为同一目的而创建的。以下是您的示例的示例代码:

print(gender())

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

这是另一个没有导入任何模块。在这里,我使用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} 中,使用max函数提取具有最大值的键:

dict

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

这是另一种不创建中间字典的替代方法,但由于列表中每个元素的>>> max(my_counter_dict.iterkeys(), key=my_counter_dict.get) 1964 导致列表完成一次迭代,因此效率相对较低:

list.count

答案 1 :(得分:0)

如果你真的坚持不进口任何东西。考虑一下:

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}

def most_prolific(input_dict):
    value_list = list(input_dict.values())

    #for each uniqute value in value_list, count the frequency, and return the max
    return max([(value_list.count(x),x) for x in set(value_list)])

print(most_prolific(input_dict)[1]) #returns 1964 in your example

答案 2 :(得分:0)

即使我建议您也不需要导入任何东西,这是一项简单的任务:

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

答案 3 :(得分:0)

您可以将key功能与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} max_recurrence = max(input_dict.values(), key=lambda x:input_dict.values().count(x)) 参数一起使用:

1964

输出:

getBackground