将文件转换为字典,其中包含字符重复次数

时间:2015-09-09 18:09:34

标签: 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}

到目前为止,我的代码看起来像这样:

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

我知道它没有完成,但我不知道如何添加第一个字符重复的次数,然后使这些值与右键对应。请帮我。 谢谢

3 个答案:

答案 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}