找出:在给定句子中出现一个字符的字数:PYTHON

时间:2017-04-04 06:17:55

标签: python string

在解释我的要求之前,让我解释一下我不想要的东西:

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

3 个答案:

答案 0 :(得分:1)

你可以做到

sum(['l' in i for i in s.split()])

s.split()将您的句子分成单词(按分割)。然后for循环检查字符l是否在该特定单词中,如果它是或不是,则产生TrueFalsesum函数计算所有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_modelgroupby模块和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)