我正在尝试编写一个函数,该函数将接收保存在我的计算机中的文本文件,然后它将读取文件中的所有名称,并且只获取每个名称的第一个字符,每个名称都在新队。这些字符将是我正在创建的字典的键,值将是文件中的名称以该字母开头的次数。因此,如果文本文件如下:
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
我知道它没有完成,但我不知道如何添加第一个字符重复的次数,然后使这些值与右键对应。请帮我。 谢谢
答案 0 :(得分:1)
您可以使用collections.Counter
:
from collections import Counter
with open('a.txt') as f:
counter = Counter([line[0] for line in f])
print(counter)
这将打印:
Counter({'M': 3, 'J': 2, 'A': 1, 'B': 1, 'H': 1, 'K': 1, 'L': 1})
答案 1 :(得分:0)
这样做的聪明方法是使用Counter
,这是一种用于计算事物的特殊字典。但您也可以使用普通字典来完成:
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}
您的问题中的代码存在一些问题。
变量名必须以字母或下划线开头,它们不能以数字开头,因此1char
会出现语法错误。
您使用names
作为字典的名称,但您还试图将其作为文件名提供给open()
,但这不是上班。即使您在代码中先前将names
设置为正确的文件名,一旦执行names={}
,它现在指的是空字典。
您可以使用lines = file.readlines()
将文件行放入列表中,然后执行file.read(line[1])
。您不需要再次阅读该文件:您已经获得了所有内容。此外,在file.readlines()
文件末尾的文件指针后,您无法从中读取更多数据(除非您&#34;使用.seek()
方法回放&#34;文件。
此外,您需要line
的第一个字符。你可以用line[0]
得到它,因为Python使用从零开始的索引; line[1]
可以获得该行中的第二个字符。
答案 2 :(得分:0)
一些更改将使您的代码可行:
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}