在python的字典中获取具有最大值的键

时间:2020-06-12 14:03:09

标签: python python-3.x dictionary jupyter

我有一个问题要在.txt文件中打印出频率最高的单词,并使用max函数来获得具有最大值的键,如下所示:

freq=dict()
f=open('words.txt','r')
for line in f:
     words=line.split()
     for word in words:
     word=word.lower()
     freq[word]=freq.get(word,0)+1

maximum=max(freq)
print(maximum)

但是在进行交叉检查后,我发现提供了错误的密钥作为输出。代码的第二部分更改如下:

maximum = max(freq, key=freq.get)
print(maximum)

在这里,获得的输出与出现最大次数的单词匹配。

我想知道两种情况下获得不同结果的原因,以及将来处理相似情况/问题时哪种方法更好。谢谢。

4 个答案:

答案 0 :(得分:1)

max(freq)返回字典中的最大键,如果键是字符串,则返回字母的最后一个键

添加key=freq.get关键字参数时,将获得最大值为x的元素freq.get(x)

答案 1 :(得分:0)

这是因为max(freq)正在比较所有单词和彼此。

使用key=freq.get来比较字典中的值并返回具有最高值的键。

答案 2 :(得分:0)

发生这种情况是因为max不知道如何比较dict的元素。因此,如果您不提供key,则默认情况下会按字母顺序对它们进行比较。但是,当您给它一个函数时,它将使用该函数并根据该函数找到max:

>>> counts = {"a": 10, "b": 5, "c": 20, "d": 15}
>>> max(counts)
'd'
>>> max(counts, key=counts.get)
'c'

答案 3 :(得分:0)

您可能有多个具有最大值的键。 选项

maximum = max(freq, key=freq.get)

将返回与第一个值关联的键。 如果您想拥有另一个,您可以使用以下代码:

def select_key_with_max_value(my_dict):
    my_lst=[(a,b) for (a,b)in my_dict.items()]    
    max_value = max(my_lst)[1]
    lst_max_values = [(key,values) for (key,values) in my_dict.items()\
                     if values ==max(my_lst)[1] ]
    lst_max_values =sorted(lst_max_values)
    num = len(lst_max_values)
    print ("There are {} items with a maximum value.".format(num))
    order = int(input("Which of the key(s) do you want by the keys' alphabetic 
                       order?"))-1
    return lst_max_values[order][0]

举个例子:

Tv = { 'GameOfThrones':100, 'BreakingBad':100,'TMKUC' : 100} 

select_key_with_max_value(Tv)

结果:

There are 3 items with a maximum value.
Which of the key(s) do you want by the keys' alphabetic order?3
'TMKUC'