Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
字典中的Python增量值_Python_Dictionary - Fatal编程技术网

字典中的Python增量值

字典中的Python增量值,python,dictionary,Python,Dictionary,我试图计算文本文件中的每个单词,并将其作为键值对添加到字典中。它向我抛出了一个错误:如果关键字不在wordDict中: TypeError:不可损坏的类型:“列表” 另外,我想知道.split()是否好,因为我的文本文件包含不同的标点符号 fileref = open(mypath + '/' + i, 'r') wordDict = {} for line in fileref.readlines(): key = line.split() if key not in word

我试图计算文本文件中的每个单词,并将其作为键值对添加到字典中。它向我抛出了一个错误:如果关键字不在wordDict中: TypeError:不可损坏的类型:“列表” 另外,我想知道.split()是否好,因为我的文本文件包含不同的标点符号

fileref = open(mypath + '/' + i, 'r')
wordDict = {}
for line in fileref.readlines():
    key = line.split()
    if key not in wordDict:
        wordDict[key] = 1
    else:
        wordDict[key] += 1
输出:


key
是一个列表,您试图查看列表是否在字典中,这相当于查看它是否是其中一个键。无法列出字典键,因此出现“Unhabable type”错误。

键是当前行中以空格分隔的单词列表。您还需要迭代该列表

for line in fileref:
    keys = line.split()
    for key in keys:
        if key not in wordDict:
            wordDict[key] = 1
        else:
            wordDict[key] += 1

这可以通过使用
setdefault
方法或
collections
模块中的
defaultdict
进行大量清理;这两种方法都允许您通过自动添加初始值来避免显式检查密钥(如果该密钥不在
dict
中)

for key in keys:
    wordDict.setdefault(key, 0) += 1

返回单词列表

>>> "hello world".split()
['hello', 'world']
>>> 
和列表或任何其他可变对象不能用作字典的键,因此会出现错误
TypeError:unhabable type:'list'

您需要对其进行迭代以包括其中的每一个,而且建议使用的方法是

以上内容可以通过使用和调用来缩短

from collections import Counter

with open(mypath + '/' + i, 'r') as fileref:    
    wordDict = Counter( word for line in fileref for word in line.split() )

如果你想使用一个额外的分隔符,你可以在你分割之前使用
line.replace(other,”)
。这个例子可以更好地使用多行的例子,str.splitlines()可以用来:
from collections import defaultdict
wordDict = defaultdict(int)   # Default to 0, since int() == 0

...

   for key in keys:
       wordDict[key] += 1
>>> "hello world".split()
['hello', 'world']
>>> 
wordDict = {}
with open(mypath + '/' + i, 'r') as fileref:
    for line in fileref:
        for word in line.split():
            if word not in wordDict:
                wordDict[word] = 1
            else:
                wordDict[word] += 1
from collections import Counter

with open(mypath + '/' + i, 'r') as fileref:    
    wordDict = Counter( word for line in fileref for word in line.split() )