Python 如何从文件中读取并将每个单词附加到词典中?
我想做的是从一个文件中读取,然后针对每个单词,将其与发生次数一起添加到字典中 例如: “今天是星期天。明天不是星期天。” 我的字典是这样的: {‘今天’:1,‘是’:2,‘星期日’:2,‘明天’:1,‘不是’:1} 我要做的是使用readline和split创建一个列表,然后将每个元素及其值附加到一个空字典中,但到目前为止它还没有真正起作用。以下是迄今为止我所掌握的信息,尽管它并不完整:Python 如何从文件中读取并将每个单词附加到词典中?,python,file,dictionary,Python,File,Dictionary,我想做的是从一个文件中读取,然后针对每个单词,将其与发生次数一起添加到字典中 例如: “今天是星期天。明天不是星期天。” 我的字典是这样的: {‘今天’:1,‘是’:2,‘星期日’:2,‘明天’:1,‘不是’:1} 我要做的是使用readline和split创建一个列表,然后将每个元素及其值附加到一个空字典中,但到目前为止它还没有真正起作用。以下是迄今为止我所掌握的信息,尽管它并不完整: file = open('any_file,txt', 'r') for line in file.rea
file = open('any_file,txt', 'r')
for line in file.readline().split():
for i in range(len(line)):
new_dict[i] = line.count(i) # I'm getting an error here as well, saying that
return new_dict # I can't convert int to str implicitly
这样做的问题是,当我的字典在每一行被读取时更新时,单词的值不会累积。因此,如果在另一行中“sunday”出现3次,我的字典将包含{'sunday':3},而不是{'sunday':5}。有什么帮助吗?我不知道从这里到哪里去,我对这一切都是新手。你在找什么
e、 g:
(也使用了一个。)
请注意,您的示例仅适用于第一行,我认为这不是故意的,并且此解决方案适用于整个文件(显然,交换这一点很简单)。您正在寻找
e、 g:
(也使用了一个。)
请注意,您的示例仅适用于第一行,我认为这不是故意的,并且此解决方案适用于整个文件(显然,交换这一点很简单)。您使用的是Python 3还是Python 2.7 如果是,请使用集合库中的计数器:
import re
from collections import Counter
words = re.findall('\w+', open('any_file.txt').read().lower())
Counter(words).most_common(10)
但你们会得到元组列表。将元组列表转换为字典应该很容易。您使用的是Python 3还是Python 2.7 如果是,请使用集合库中的计数器:
import re
from collections import Counter
words = re.findall('\w+', open('any_file.txt').read().lower())
Counter(words).most_common(10)
但你们会得到元组列表。将元组列表转换为字典应该很容易。这里有一个不处理标点符号的简单版本
from collections import Counter
counter = Counter()
with open('any_file,txt', 'r') as file:
for line in file:
for word in line.split():
counter[word] += 1
也可以这样写:
from collections import Counter
counter = Counter(word for line in file for word in line.split())
这里有一种使用dict
counter = {}
with open('any_file,txt', 'r') as file:
for line in file:
for word in line.split():
if word not in counter:
counter[word] = 1
else:
counter[word] += 1
这里有一个简单的版本,不涉及标点符号
from collections import Counter
counter = Counter()
with open('any_file,txt', 'r') as file:
for line in file:
for word in line.split():
counter[word] += 1
也可以这样写:
from collections import Counter
counter = Counter(word for line in file for word in line.split())
这里有一种使用dict
counter = {}
with open('any_file,txt', 'r') as file:
for line in file:
for word in line.split():
if word not in counter:
counter[word] = 1
else:
counter[word] += 1
试试这个
file = open('any_file.txt', 'r')
myDict = {}
for line in file:
lineSplit = line.split(" ")
for x in xrange(len(lineSplit)):
if lineSplit[x] in myDict.keys(): myDict[lineSplit[x]] += 1
else: myDict[lineSplit[x]] = 1
file.close()
print myDict
试试这个
file = open('any_file.txt', 'r')
myDict = {}
for line in file:
lineSplit = line.split(" ")
for x in xrange(len(lineSplit)):
if lineSplit[x] in myDict.keys(): myDict[lineSplit[x]] += 1
else: myDict[lineSplit[x]] = 1
file.close()
print myDict
这种类型的计数器无法使用
collections.Counter()
。(编辑:使用编辑功能会更好一些,尽管这是一种低效的展平iterable的方法)。收集计数器是唯一的方法吗?我认为任何其他的解决方案都是冗长乏味的though@peppy当然,这不是唯一的解决方案,但它很有效,而且工作已经为您完成。@peppy,您可以使用dict
来完成这项工作。如果不存在密钥,只需添加密钥,然后将1添加到value@Peppy. 我使用dict添加了一个版本。还有其他方法,但我认为这一种很容易理解。这种方法违背了使用collections.Counter()
的意义。(编辑:使用编辑功能会更好一些,尽管这是一种低效的展平iterable的方法)。收集计数器是唯一的方法吗?我认为任何其他的解决方案都是冗长乏味的though@peppy当然,这不是唯一的解决方案,但它很有效,而且工作已经为您完成。@peppy,您可以使用dict
来完成这项工作。如果不存在密钥,只需添加密钥,然后将1添加到value@Peppy. 我使用dict添加了一个版本。还有其他方法,但我认为这一种很容易理解。这个正则表达式实际上并不需要,而且集合
存在于2.x中。@Lattyware,对不起,我应该让自己更清楚。Python2中没有计数器。我刚刚测试过,至少在2.7中肯定有。@Lattyware,对不起,我刚刚意识到我使用了Python2.6。该计数器是在Python2.7中引入的。这个正则表达式不是真的需要,而且集合存在于2.x.@Lattyware中,对不起,我应该说得更清楚些。Python2中没有计数器。我刚刚测试过,至少在2.7中肯定有。@Lattyware,对不起,我刚刚意识到我使用了Python2.6。该计数器是在Python2.7中引入的。另一个问题是,如果“星期日”在一行上出现3次,那么你在做line.count(“星期日”)
3次,这是浪费另一个问题是,如果“星期日”在一行上出现3次,那么你在做line.count(“星期日”)
3次,这是浪费