Did*_*der 0 python dictionary function
基本上我有两个词典:一个是Counter()另一个词典dict()
第一个包含文本中的所有唯一单词,作为键和每个单词在文本中的频率,作为值
第二个包含与键相同的唯一字,但值是用户输入的定义.
后者是我在实施时遇到的问题.我创建了一个函数,它接受一个单词,检查该单词是否在频率字典中,如果是,则允许用户输入该单词的定义(否则,它将打印错误).然后将单词及其定义作为键值对(使用dict.update(word=definition))添加到第二个字典中.
但每当我运行程序时,我都会收到错误消息:
Nameerror:名称''未定义
这是代码:
import string
import collections
import pickle
freq_dict = collections.Counter()
dfn_dict = dict()
def cleanedup(fh):
for line in fh:
word = ''
for character in line:
if character in string.ascii_letters:
word += character
else:
yield word
word = ''
def process_book(textname):
with open (textname) as doc:
freq_dict.update(cleanedup(doc))
global span_freq_dict
span_freq_dict = pickle.dumps(freq_dict)
def show_Nth_word(N):
global span_freq_dict
l = pickle.loads(span_freq_dict)
return l.most_common()[N]
def show_N_freq_words(N):
global span_freq_dict
l = pickle.loads(span_freq_dict)
return l.most_common(N)
def define_word(word):
if word in freq_dict:
definition = eval(input('Please define ' + str(word) + ':'))
dfn_dict({word: definition})
else:
return print('Word not in dictionary!')
process_book('DQ.txt')
process_book('HV.txt')
# This was to see if the if/else was working
define_word('asdfs')
#This is the actual word I want to add
define_word('de')
print(dfn_dict.items())
Run Code Online (Sandbox Code Playgroud)
我觉得错误很小或非常大.任何帮助将不胜感激.
编辑:所以程序现在允许我输入一个定义,但一旦我这样做就返回错误:
>>>
Word not in dictionary!
Please define esperar:To await
Traceback (most recent call last):
File "C:\Users\User 3.1\Desktop\Code Projects\dict.py", line 50, in <module>
define_word('esperar')
File "C:\Users\User 3.1\Desktop\Code Projects\dict.py", line 37, in define_word
definition = eval(input('Please define ' + str(word) + ':'))
File "<string>", line 1
To await
^
SyntaxError: unexpected EOF while parsing
>>>
Run Code Online (Sandbox Code Playgroud)
dict.update(word=definition)不会做你认为它做的事情.看这个例子:
>>> someDict = {}
>>> word = 'foo'
>>> definition = 'bar'
>>> someDict.update(word=definition)
>>> someDict
{'word': 'bar'}
Run Code Online (Sandbox Code Playgroud)
如您所见,word虽然您希望word首先解析变量,但此方法将始终更新密钥.这不起作用,因为您正在将一个命名参数传递给该update函数,并且那些命名参数是按字面意思获取的.
如果要更新等于值的键,word可以这样做:
someDict[word] = definition
Run Code Online (Sandbox Code Playgroud)