Python3:计算嵌套字典中字符的出现

时间:2020-02-17 07:00:49

标签: python python-3.x dictionary n-gram defaultdict

我目前正在编写一小段代码,似乎遇到了障碍。我想知道是否有可能找到跟随特定字符组的字符中最常见的情况?

例如,说我有以下句子:

"fishies are super neat, a fish is a good pet. also, fishing is for dads."

例如,如何确定片段"fish"之后出现的最常见字符?

在这个特定的示例中,通过手工操作,我得到了如下内容:

{"i": 2, " ": 1}

当前,我编写了这段代码来抓取单词的“鱼”部分:

b = Class(n, 'file.txt')
ngrams = [b.file[i:i+n] for i in range(len(b.file)-1)]

这会将所有文本分成4个块,如下所示:['fish', 'ishi', 'shie', 'hies', 'ies ', 'es a'.....]

我的目标是结合这两种思想,以便我可以打印出类似于以下内容的内容:

{'fish' : {'i':2, ' ':1} ..... }

我目前还在__init__中定义了一个defaultdict,如下所示:self.counts=defaultdict(lambda: defaultdict(int))

这是我最接近实现所需解决方案的方法,尽管我不确定如何获取后面的单个字符以及如何计算这些字符:

b.counts = {i : { j : 5 for j in ngrams } for i in ngrams }

5只是一个占位符,所以我可以看到打印的内容。 j in ngrams还是一个占位符,可查看打印内容。任何人的任何意见或建议,将不胜感激!

3 个答案:

答案 0 :(得分:1)

import re

raw_string = "fishies are super neat, a fish is a good pet. also, fishing is for dads."

key =  ['fish', 'ishi', 'shie', 'hies']
out = {}
for item in key:
    data = []
    for word in re.findall(item+'.', raw_string):
        data.append(word[-1])
    results = {item:data.count(item) for item in data}
    out[item] = results

输出:

{'fish': {'i': 2, ' ': 1}, 'ishi': {'e': 1, 'n': 1}, 'shie': {'s': 1}, 'hies': {' ': 1}}

答案 1 :(得分:1)

您可以尝试这样的事情:

import re
from collections import Counter

sentence = "fishies are super neat, a fish is a good pet. also, fishing is for dads."
word = 'fish'
result = {}
result[word] = Counter(re.findall(f'{word}(.)', sentence, flags=re.IGNORECASE))

print(result)

请注意,这还将计算您要查找的片段出现在单词中间的情况。如果您只想计算以该片段开头的单词,则可以改用re.findall(f'\\W{word}(.)')之类的东西。

答案 2 :(得分:1)

sentence = "fishies are super neat, a fish is a good pet. also, fishing is for dads."
s_list = sentence.split("fish")
stat = {}
for i in s_list[1:]:
    if i[0] in stat.keys():
        stat[i[0]] += 1
    else:
        stat[i[0]] = 1

print(stat)