在解释我的要求之前,让我解释一下我不想要的东西:
s= 'Hello satya, have you achieved your goal'
s.count('l') #o/p: 3
#I don't want 3 instead I need 2. How? explained below.
预期产出:
{'H':3, 'e':3, 'l':2, 'o':4, 's':1, 'a':3....etc}
即:从该句中取出所有独特的字母/字符。 然后找到"该字符存在多少个单词" ,所以算一下没有出现并存储在字典中。
例如字符' l'在那个句子中出现3次,但是出现在2个单词中(你好,它重复但是我希望它被计为1)。
请建议。如果我错过了一些让我的问题更容易理解的内容,请加以强调。
以下是我的尝试:
def char_word(s):
s_d = {}
chars = list(s.replace(' ', ''))
print(chars)
for char in chars:
c_count = 0
for word in s.split():
if char in word:
c_count += 1
s_d[char] = c_count
print(s_d)
return s_d
答案 0 :(得分:1)
你可以做到
sum(['l' in i for i in s.split()])
s.split()
将您的句子分成单词(按分割)。然后for循环检查字符
l
是否在该特定单词中,如果它是或不是,则产生True
或False
。 sum
函数计算所有True
s
答案 1 :(得分:1)
首先,将字符串拆分为单个单词并创建输出字典。我建议使用collections.Counter
c.ass,它只是一个dict
子类,用于计算出现次数:
import collections
counter = collections.Counter()
words = s.split()
现在遍历所有单词并从每个单词创建set
。由于set
不能包含重复值,因此保证每个字符只有一个副本:
for word in words:
characters = set(word)
最后,循环显示单词中现在唯一的字符,增加该字符的计数器值:
for character in characters:
counter[character] += 1
另外,你可以将这个缩短很多,甚至可以缩短到一行:
>>> counter = collections.Counter(c for word in s.split() for c in set(word))
要获取特定字符的计数,只需通过counter[c]
:
>>> counter['l']
2
>>> counter['x']
0
>>> counter['H']
1
答案 2 :(得分:1)
您也可以keras.models.save_model
从groupby
模块和itertools
这样做:
dict comprenesion
Outut:
from itertools import groupby
a = 'Hello satya, have you achieved your goal'
a = a.replace(',','').split()
sub = [j.lower() for k in a for j in set(k)]
final = {k:len(list(v)) for k,v in groupby(sorted(sub), lambda x: x)}
print(final)