带值和键的字典的python单词频率

带值和键的字典的python单词频率,python,Python,我是python的第一次学习者,我了解如何使用词频来计算列表中每个唯一变量的数量,如下所示 sentence = ['hello', 'people', 'are', 'the', 'most', 'common', 'word', 'people', 'use', 'for', 'language ', 'learning'] words_freq ={} #dictionary for the counts for word in sentence: if word not in

我是python的第一次学习者,我了解如何使用词频来计算列表中每个唯一变量的数量,如下所示

sentence = ['hello', 'people', 'are', 'the', 'most', 'common', 'word', 'people', 'use', 'for', 'language ', 'learning']

words_freq ={} #dictionary for the counts
for word in sentence:
    if word not in words_freq:

        words_freq[word] =1
    else:

        words_freq[word] +=1

print (words_freq)
Food = {
2015: ["Apple", "Milk", "Cookie", "Banana", "Orange" ],
2016: ["Potato", "Orange", "Chocolate", "Milk", "Mango"],
2017: ["Fish", "Potato", "Orange", "Mango", "Banana"],
2018: ["Beef", "Pork", "Fish", "Apple", "Cookie"],
2019: ["Pork", "Orange", "Apple", "Mango", "Chocolate"]
}
然而,我想知道一个单词的频率如何在字典上使用双for循环呢

例如,我有一本这样的字典

sentence = ['hello', 'people', 'are', 'the', 'most', 'common', 'word', 'people', 'use', 'for', 'language ', 'learning']

words_freq ={} #dictionary for the counts
for word in sentence:
    if word not in words_freq:

        words_freq[word] =1
    else:

        words_freq[word] +=1

print (words_freq)
Food = {
2015: ["Apple", "Milk", "Cookie", "Banana", "Orange" ],
2016: ["Potato", "Orange", "Chocolate", "Milk", "Mango"],
2017: ["Fish", "Potato", "Orange", "Mango", "Banana"],
2018: ["Beef", "Pork", "Fish", "Apple", "Cookie"],
2019: ["Pork", "Orange", "Apple", "Mango", "Chocolate"]
}
如何进行单词频率/计数并打印类似的内容?或者以列表形式存储最高值? 苹果:3 牛奶:2 橙色:3 .. .. ..

它可以帮助您:

Food = {
2015: ["Apple", "Milk", "Cookie", "Banana", "Orange" ],
2016: ["Potato", "Orange", "Chocolate", "Milk", "Mango"],
2017: ["Fish", "Potato", "Orange", "Mango", "Banana"],
2018: ["Beef", "Porn", "Fish", "Apple", "Cookie"],
2019: ["Pork", "Orange", "Apple", "Mango", "Chocolate"]
}

words_freq ={} #dictionary for the counts
for word1 in Food.values():
    for word in word1:
        if word not in words_freq:

            words_freq[word] =1
        else:

            words_freq[word] +=1

print (words_freq)
它帮助您:

Food = {
2015: ["Apple", "Milk", "Cookie", "Banana", "Orange" ],
2016: ["Potato", "Orange", "Chocolate", "Milk", "Mango"],
2017: ["Fish", "Potato", "Orange", "Mango", "Banana"],
2018: ["Beef", "Porn", "Fish", "Apple", "Cookie"],
2019: ["Pork", "Orange", "Apple", "Mango", "Chocolate"]
}

words_freq ={} #dictionary for the counts
for word1 in Food.values():
    for word in word1:
        if word not in words_freq:

            words_freq[word] =1
        else:

            words_freq[word] +=1

print (words_freq)

defaultdict对于您的用例来说非常优雅 它为给定的int类型创建一个默认字典-int value的默认值是0,它使您能够编写更少的代码

从集合导入defaultdict

def get_freq(food_dict: dict) -> dict:
    freq = defaultdict(int)
    for year, lst in food_dict.items():
        for elem in lst:
            freq[elem] += 1
    return freq

defaultdict对于您的用例来说非常优雅 它为给定的int类型创建一个默认字典-int value的默认值是0,它使您能够编写更少的代码

从集合导入defaultdict

def get_freq(food_dict: dict) -> dict:
    freq = defaultdict(int)
    for year, lst in food_dict.items():
        for elem in lst:
            freq[elem] += 1
    return freq

使用标准python字典,您可以利用它来处理字典中不存在要递增的键的情况

如果键在字典中,则返回键的值,否则为默认值。如果 默认值未给定,它默认为
None
,因此此方法不会 引发了一场争论

输出:

{'Apple': 3, 'Milk': 2, 'Cookie': 2, 'Banana': 2, 'Orange': 4, 'Potato': 2, 'Chocolate': 2, 'Mango': 3, 'Fish': 2, 'Beef': 1, 'Porn': 1, 'Pork': 1}

使用标准python字典,您可以利用它来处理字典中不存在要递增的键的情况

如果键在字典中,则返回键的值,否则为默认值。如果 默认值未给定,它默认为
None
,因此此方法不会 引发了一场争论

输出:

{'Apple': 3, 'Milk': 2, 'Cookie': 2, 'Banana': 2, 'Orange': 4, 'Potato': 2, 'Chocolate': 2, 'Mango': 3, 'Fish': 2, 'Beef': 1, 'Porn': 1, 'Pork': 1}

您不需要双循环,但可以执行以下操作:

food = {
    2015: ["Apple", "Milk", "Cookie", "Banana", "Orange" ],
    2016: ["Potato", "Orange", "Chocolate", "Milk", "Mango"],
    2017: ["Fish", "Potato", "Orange", "Mango", "Banana"],
    2018: ["Beef", "Porn", "Fish", "Apple", "Cookie"],
    2019: ["Pork", "Orange", "Apple", "Mango", "Chocolate"]
}

words_freq = {}
for year in food.keys():
    for fruit in food[year]:

        if fruit in words_freq.keys():
            words_freq[fruit] += 1
        else:
            words_freq[fruit] = 1

您不需要双循环,但可以执行以下操作:

food = {
    2015: ["Apple", "Milk", "Cookie", "Banana", "Orange" ],
    2016: ["Potato", "Orange", "Chocolate", "Milk", "Mango"],
    2017: ["Fish", "Potato", "Orange", "Mango", "Banana"],
    2018: ["Beef", "Porn", "Fish", "Apple", "Cookie"],
    2019: ["Pork", "Orange", "Apple", "Mango", "Chocolate"]
}

words_freq = {}
for year in food.keys():
    for fruit in food[year]:

        if fruit in words_freq.keys():
            words_freq[fruit] += 1
        else:
            words_freq[fruit] = 1

另一种方法是创建一个列表,然后计算该列表中的频率:

foodList = []

#creates a single list
for idx, f in enumerate(Food):
    foodList = foodList + list(Food.values())[idx]

#makes a count in that list
words_freq ={}
for word in foodList:
    if word not in words_freq:
        words_freq[word] =1
    else:
        words_freq[word] +=1
这就得到了正确的答案:

{'Apple': 3, 'Milk': 2, 'Cookie': 2, 'Banana': 2, 'Orange': 4, 'Potato': 2, 'Chocolate': 2, 'Mango': 3, 'Fish': 2, 'Beef': 1, 'Pork': 2}

另一种方法是创建一个列表,然后计算该列表中的频率:

foodList = []

#creates a single list
for idx, f in enumerate(Food):
    foodList = foodList + list(Food.values())[idx]

#makes a count in that list
words_freq ={}
for word in foodList:
    if word not in words_freq:
        words_freq[word] =1
    else:
        words_freq[word] +=1
这就得到了正确的答案:

{'Apple': 3, 'Milk': 2, 'Cookie': 2, 'Banana': 2, 'Orange': 4, 'Potato': 2, 'Chocolate': 2, 'Mango': 3, 'Fish': 2, 'Beef': 1, 'Pork': 2}


你的想法是对的。你需要两个循环。我建议你尝试一下,自己尽可能多地弄清楚。你甚至应该考虑创建一个函数来包装你现有的代码,在列表中对单词频率进行计数。所需的输出是什么?所需的输出被列为所有类型的食物,并按照它们的总数进行排序,并将其存储在一个新字典中。所以我可以把它打印出来你的结果(按计数分组的字典)是关闭的!有许多项目多次出现。这在真正的字典里是不可能发生的。如果您打印它,您将看到它包含的项目要少得多。虽然不是一个错误,但它仍然使帮助您(显然,根据已经提供的答案,一段现成的代码…)变得更加困难。你在前言中提到了字数;您的示例输出永远不能使用这样的计数脚本。请调整所需的输出。(对您的问题似乎有一些误解。请澄清。我的印象是,从您(现有)的字数列表中,您希望创建一本词典,如您展示的
食品
一本。如果不是这样,请重写。)您的想法是正确的。你需要两个循环。我建议你尝试一下,自己尽可能多地弄清楚。你甚至应该考虑创建一个函数来包装你现有的代码,在列表中对单词频率进行计数。所需的输出是什么?所需的输出被列为所有类型的食物,并按照它们的总数进行排序,并将其存储在一个新字典中。所以我可以把它打印出来你的结果(按计数分组的字典)是关闭的!有许多项目多次出现。这在真正的字典里是不可能发生的。如果您打印它,您将看到它包含的项目要少得多。虽然不是一个错误,但它仍然使帮助您(显然,根据已经提供的答案,一段现成的代码…)变得更加困难。你在前言中提到了字数;您的示例输出永远不能使用这样的计数脚本。请调整所需的输出。(似乎对您的问题有一些误解。请澄清。我的印象是,从您(现有)的字数列表中,您希望创建一本词典,如您展示的
食品
一本。如果不是这样,请重写。)非常感谢,我只是想知道为什么我从第二个for循环中得到一个键错误。这帮了很多忙,我只是想知道为什么第二个for循环会出现一个键错误。这对汉克斯很有帮助!我会尽我最大的努力去理解这一点!谢谢!我会尽我最大的努力去理解这一点@usr2564301用户显示代码并要求将其扩展为嵌套dict,所以我进行了修改,我们知道有很多方法可以做到这一点。在你看来,我应该在任何答案后面进行评论。不,OP所问的是“如何做一个单词频率/计数并打印类似的内容?”,并将显示的字典
Food
作为输出。(除非我大错特错。OP可能想澄清这个问题…@usr2564301不,你没有理解这个问题,如果你检查卡尔文接受的答案,结果与我的相同!我已经为OP添加了一条评论,以进行澄清。整个“字数”前言和示例代码似乎与
食品
输出无关。@usr2564301
食品
不是输出。这是另一本字典,询问(相当不明确)如何对所有值进行单词计数。示例输出(同样,非常模糊)在本文的末尾是正确的post@usr2564301用户显示代码并要求将其扩展为嵌套dict,所以我修改了,我们知道有很多方法可以做到这一点。在你看来,我应该在任何答案后面评论它不会。不,什么