将文本文件作为键的字典

时间:2018-01-10 14:17:47

标签: python

如何在不使用列表的情况下直接将文件的单词直接转换为字典作为字典?这是我的代码:

def abc(f):
    with open(f, "r")as f:
        dict = {}
        lst = []
        for line in f:
            lst += line.strip().split()
        for item in lst:
            dict[item] = ""
    return dict


print(abc("file.txt"))

输入示例" file.txt":

abc def
ghi jkl mno
pqr

输出:

{"abc":"", "def":"", "ghi":"", "jkl":"", "mno":"", "pqr":""}

split()的输出是一个列表。因此,通过使用它,我需要从文件中读取数据,将其存储在列表中,然后将其定义为字典的键。我的问题是我们如何忽略该列表,并在从文件中读取数据后,将它们直接放到字典中?

2 个答案:

答案 0 :(得分:5)

如果你真的想要一本字典,那么在分开的单词上使用dict理解一次构建它:

def abc(f):
   return {word:"" for line in f for word in line.split()}

但你可能想要一个set,因为你的dict没有值:

def abc(f):
   return {word for line in f for word in line.split()}

我怀疑你想计算这些词,在这种情况下:

def abc(f):
   return collections.Counter(word for line in f for word in line.split())

请注意,split不会在标点符号上拆分,因此如果文字包含一些,则除非您替换

,否则您将会有重复的字词
for word in line.split()

通过

for word in re.split("\W",line) if word

(使用re包,在开始/结束时生成空字段有一点点缺点,可以通过过滤word来轻松修复

答案 1 :(得分:4)

我不知道你想要做什么,也不知道预期的输出是什么,但以下功能实际上与你的代码片段相同(也有点清洁)

def abc(f):
    dic = {}
    with open(f, "r")as f:
        for line in f:
            # using split() will already remove
            # trainling whitespaces so you don't 
            # need strip() here
            for item in line.split():
                dic[item] = ""
    return dic