Python 将文件转换为具有字符重复计数值的字典
我正在尝试编写一个函数,该函数将接收保存在计算机中的文本文件,然后它将读取文件中的所有名称,并仅获取每个名称的第一个字符,每个名称都位于新行中。这些字符将是我正在创建的字典的键,值将是文件中名称以该字母开头的次数。因此,如果文本文件如下所示:Python 将文件转换为具有字符重复计数值的字典,python,dictionary,text-files,Python,Dictionary,Text Files,我正在尝试编写一个函数,该函数将接收保存在计算机中的文本文件,然后它将读取文件中的所有名称,并仅获取每个名称的第一个字符,每个名称都位于新行中。这些字符将是我正在创建的字典的键,值将是文件中名称以该字母开头的次数。因此,如果文本文件如下所示: Mary Jane Anna Judith Kim Melody Myriam Lauren Betty Holley 那么我的字典应该是: {'A':1, 'B':1, 'H':1, 'J':2, 'K':1, 'L':1, 'M':3} 到目前为止
Mary
Jane
Anna
Judith
Kim
Melody
Myriam
Lauren
Betty
Holley
那么我的字典应该是:
{'A':1, 'B':1, 'H':1, 'J':2, 'K':1, 'L':1, 'M':3}
到目前为止,我的代码如下所示:
def newDictionary():
names={}
char = []
file = open(names)
lines = file.readlines()
for line in lines:
1char = file.read(line[1])
1char.append(char)
for keys,values in names():
return names
我知道它还没有完成,但我不知道如何添加第一个字符重复的次数,然后使这些值对应于正确的键。请帮帮我。
谢谢您可以使用:
这将打印:
Counter({'M': 3, 'J': 2, 'A': 1, 'B': 1, 'H': 1, 'K': 1, 'L': 1})
聪明的方法是使用a,这是一种用于计算事物的特殊类型的字典。但您也可以使用普通字典:
def newDictionary(filename):
names = {}
with open(filename) as f:
for line in f:
first = line[0]
if first in names:
names[first] += 1
else:
names[first] = 1
return names
names = newDictionary('qdata')
print(names)
输出
{'A': 1, 'B': 1, 'H': 1, 'K': 1, 'J': 2, 'M': 3, 'L': 1}
{'A': 1, 'B': 1, 'H': 1, 'K': 1, 'J': 2, 'M': 3, 'L': 1}
您的问题中的代码有几个问题 变量名必须以字母或下划线开头,不能以数字开头,因此
1char
会给出语法错误
您正在使用名称
作为字典的名称,但您还试图将其作为open()
的文件名,这是行不通的。即使您在代码的前面将names
设置为正确的文件名,一旦您设置了names={}
它现在引用一个空字典
您可以使用lines=file.readlines()
将文件的行放入一个列表中,然后执行file.read(行[1])
。您不需要再次读取该文件:您已经获得了它的所有内容。此外,在file.readlines()
之后,文件指针位于文件的末尾,因此您无法从中读取更多数据(除非使用其.seek()
方法“倒带”文件)
另外,您需要
行的第一个字符。您可以通过行[0]
获得,因为Python使用基于零的索引<代码>行[1]
获取行中的第二个字符。一些更改将使代码可行:
def newDictionary():
names={}
lines = open(in_file).readlines()
for item in lines:
names[item[0]]=names.get(item[0],0)+1
return names
输出:
{'A': 1, 'B': 1, 'H': 1, 'K': 1, 'J': 2, 'M': 3, 'L': 1}