Python 如何使用pyhton知道以txt文件的每个字母开头的名称数

Python 如何使用pyhton知道以txt文件的每个字母开头的名称数,python,list,file,tuples,Python,List,File,Tuples,我需要知道如何计算列表中以字母A、B、C开头的单词数。。Z 这里我留下了txt文件的读取部分 #/usr/bin/python def main(): 行=[] xs=[] 尝试: 打开(“bin nombres.txt”,“r”)作为fp: lines=[lines.strip()用于fp中的行] 对于行中的i: 打印(i[0]) xs=计数器BYLETTER(i[0]) 打印(xs) 除EOFError as e外: 打印(e) 最后: 通过 def计数器指示器(数据): 返回{v:data

我需要知道如何计算列表中以字母A、B、C开头的单词数。。Z

这里我留下了txt文件的读取部分

#/usr/bin/python
def main():
行=[]
xs=[]
尝试:
打开(“bin nombres.txt”,“r”)作为fp:
lines=[lines.strip()用于fp中的行]
对于行中的i:
打印(i[0])
xs=计数器BYLETTER(i[0])
打印(xs)
除EOFError as e外:
打印(e)
最后:
通过
def计数器指示器(数据):
返回{v:data.count(v)中的k,v的[(k,v)}.items()中的v的计数(v)]
如果名称=“\uuuuu main\uuuuuuuu”:
main()
我必须计算以[A…Z]开头的单词数。例如

  • 有三个单词以A开头
  • 有20个单词以B开头
  • 等等
在这里,我留下问题的解决方案。感谢那些帮助我的人

导入字符串
def main():
尝试:
#这将启动计数器,每个字母对应0
letter_count={letter:0表示列表中的字母(string.ascii_小写)}
打开(“bin nombres.txt”,“r”)作为fp:
对于fp中的行:
line=line.strip()
初始值=行[0]。下()
字母u计数[首字母]+=1,这里我增加每个单词
#迭代字典以获取键和值。
#在迭代过程中,将添加这些值以了解字数。
大小=0
对于键,字母中的值\u count.items():
大小+=值
打印(“以字母“{}”开头的名称有{}个数字。”.format(key,value))
打印(“文件中的总名称:{}”。格式(大小))
除EOFError as e外:
打印(e)
如果名称=“\uuuuu main\uuuuuuuu”:
main()

假设有一个列表名
list
,它有3个元素:

list = ["Geeks", "For", "Triks"]
并且有一个包含26个元素的数组

array = ["0", "0", ......"0", "0"......"0","0"]
array[0]
表示以
A
开头的字数。 .................. ..................
array[25]
表示以
Z
开头的字数。 然后 如果
list[n][0]
A
开头,则需要将
array[0]
增加1

如果
array[5]=7
,则表示有7个单词以
F
开头。
这是找到结果的简单逻辑

因此,根据您最新的答案(每行1个单词,已按字母顺序排序),类似这样的方法应该有效:

导入字符串
def main():
尝试:
#这将启动计数器,每个字母对应0
letter_count={letter:0表示列表中的字母(string.ascii_小写)}
以open(“words.txt”,“r”)作为fp:
对于fp中的行:
line=line.strip()
初始值=行[0]。下()
字母u计数[首字母]+=1,这里我们增加每个单词
打印(字母计数)
除EOFError as e外:
打印(e)
如果名称=“\uuuuu main\uuuuuuuu”:
main()
更新:


很好,您不只是想要一个现成的解决方案,但是您的代码有一些问题,并且有些问题不是超级pythonic的,这就是为什么我建议如上所述。如果你真的想使用你的解决方案,你需要修复你的
counterByLetter
函数。它的问题在于,您实际上并没有将结果存储在任何地方,而是总是为每个单词返回一个新的结果数组。您可能有一个以“z”开头的单词作为文件的最后一个单词,因此结果是所有字母的计数均为
0
,但“z”有一个字母除外。您需要在该函数中更新当前字母的值,而不是一次计算整个数组。

我建议您像这样更改代码

使用set to as value:使用第一个字母作为键,您可以在每次匹配时增加其值。因此:

from collections import defaultdict
xs
设置为
xs=defaultdict(int)

将行中i的
主体更改为

for i in lines:
  xs[i[0]] += 1
如果在
for
循环的
末尾打印
xs
,您将得到如下结果:

defaultdict(<class 'int'>, {'P': 3, 'G': 2, 'R': 2})
defaultdict(,{'P':3,'G':2,'R':2})
dict中的键区分大小写,因此,如果需要,请注意转换大小写


您不需要外部方法来完成计数工作。

看起来您的
main
应该是一个函数,而不是一个类。upss是的,对不起,您的文件数据怎么样?到目前为止,除了读取文件的内容之外,您还尝试了什么?现在我正在试验xs=list(filter(lambda x:x[0]='a',line)),看看以后我是否可以创建一个元组,这样我就有了类似于('a',4),('b',1)的内容。对于txt,每行只有一个单词。是的,它已经按字母表排序。您应该始终使用所有小写字母命名python变量,这样它们就不会与类混淆。例如,它向我显示了以下输出:[('a',0),('b',0),('c',0),('d',0),('e',0),('f',0),('g',0),('h',0),('i',0),('j',0),('k',0),('l',0),('m',0),('n',0),('o',0),('p',0),('q',0),('s',0),('t',0),('u',0),('v',0),('y',0),('x',0),('y',0),('z',1)]这些值不增加。问题是为什么?对于Z>>('Z',1)。@ShuvoKarmakar他向我展示了那个元组('Z',1),因为我的解决方案工作得不太好。但是我已经使用以下方法解决了这个问题:k={letter:0代表列表中的字母(string.ascii_lowercase)}您的解决方案运行良好!但我想看看我是否能用我的解决方案做到这一点。现在我的解返回我[('a',0),('b',0),('c',0),('d',0),('f',0),('g',0),('h',0),('i',0),('j',0),('k',0),('l',0),('m',0),('n',0),('o',0),('p',0),('q',0),('r',0),('s',0),('t',0),('u',0),('v',0),('y',0),('x',0),('@克里斯佩雷斯我更新了我的答案,说了一点abo