Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 一种将文本中的字母添加到字典中而无需穿孔的函数_Python_Python 3.x - Fatal编程技术网

Python 一种将文本中的字母添加到字典中而无需穿孔的函数

Python 一种将文本中的字母添加到字典中而无需穿孔的函数,python,python-3.x,Python,Python 3.x,我写了一个函数,可以向字典中添加字母,但当我在termianl中运行它时,它会不断地向字典中添加穿孔。我试过用“和var!=”,“和var!=”-“,等等,但不起作用,我也不明白为什么 i = 0 while i < len(text): for var in text[i] if var not in d: d[var] = 1 else: d[var] += 1 i += 1 return

我写了一个函数,可以向字典中添加字母,但当我在termianl中运行它时,它会不断地向字典中添加穿孔。我试过用“和var!=”,“和var!=”-“,等等,但不起作用,我也不明白为什么

i = 0

while i < len(text):
    for var in text[i]
        if var not in d:
            d[var] = 1
        else:
            d[var] += 1
    i += 1
return(d)
i=0
而我
使用isalpha()是一种方法:

def dict_letters(text):
    i = 0
    d = {}
    while i < len(text):
        for var in text[i]:
            if var.isalpha():
                if var not in d:
                    d[var] = 1
                else:
                    d[var] += 1
        i += 1
    return(d)

print(dict_letters("This is a Text 1, this is a number 1"))
Python区分大写字母和小写字母,如果您希望它组合大写字母和小写字母:

def dict_letters(text):
    d = {}
    for chr in text:
        if chr.isalpha():
            if chr.lower() not in d:
                d[chr.lower()] = 1
            else:
                d[chr.lower()] += 1
    return(d)

print(dict_letters("This is a Text 1, this is a number 1"))

对于您的任务,IMO最具吸引力的解决方案是:

from collections import Counter

def dict_letters(text):
    return Counter(c for c in text if c.isalpha()).items()
我假设您要计算
文本中的不同字符。对于计数,python中有一个非常有用的
计数器
类。通过使用isalpha
我们询问每个字符
c
是否是字母或标点符号


(因为到目前为止您的代码还没有编译,这只是一个猜测。)

欢迎使用!请分享一些输入和预期输出。您是否只想计算字母的频率?如果是这样,
导入集合,重新
并使用
collections.Counter(re.findall(r“[a-zA-Z]”,s))
。请提供一个issue@ggorlen非常感谢。是的!我正在对一个文本文件运行它,我注意将所有字母放入一个字典中,不要点击。请将您的代码示例更改为一段我们可以执行的代码。我们看到一个
返回
,但没有看到
def
。我们也没有看到
d
的定义。因此,您的代码无法编译。我们不能测试它。当标准库中有更快的替代方案时,我们不应该教新手if-else解决方案。“重新发明轮子既慢又容易出错。”LydiavanDyke我认为他是在尝试学习不同的概念,而不是编写适合生产的代码。我可能错了。我只是想帮忙。当然,我们都想帮忙。但在我看来,正确看待这种固定的尝试也很重要。“这会修复你的代码,但你不应该这样做”应该是答案:)别忘了:将来其他人可能会偶然发现这个答案。他们可能只是复制提议的解决方案。。。输入他们的生产代码。
from collections import Counter

def dict_letters(text):
    return Counter(c for c in text if c.isalpha()).items()