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

Python3: Counting occurrence of characters in a nested dict

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

例如,假设我有以下句子:

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

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

在这个具体的例子中,手工完成,我得到这样的结果:

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

目前,我编写了这段代码来获取单词的 "fish" 部分:

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 也是一个占位符,用于查看打印的内容。任何人的任何意见或想法将不胜感激!

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}}

您可以尝试这样的操作:

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}(.)') 之类的东西。

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)