Python:如何从函数的变量向字典传递键?

2024-05-14 11:18:11 发布

您现在位置:Python中文网/ 问答频道 /正文

基本上我有两本字典:一本是Counter(),另一本是dict()

第一个包含文本中的所有唯一单词,作为键,每个单词在文本中的频率作为值

第二个包含与键相同的唯一单词,但值是用户输入的定义。

后者是我在实施过程中遇到的困难。我创建了一个函数,接收一个单词,检查这个单词是否在频率字典中,如果是,允许用户输入这个单词的定义(否则,它将打印一个错误)。然后,该词及其定义作为键值对添加到第二个字典中(使用dict.update(word=definition))。

但是每当我运行这个程序时,我就会得到一个错误:

名称错误:未定义名称''

代码如下:

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())

我觉得错误要么很小要么很大。任何帮助都将不胜感激。

编辑:所以程序现在允许我输入一个定义,但是一旦我这样做,就会返回这个错误:

>>> 
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
>>> 

Tags: inif字典定义def错误line单词
3条回答

input()实际上将输入计算为Python代码。改用raw_input

def define_word(word):                    
    if word in freq_dict:
        definition = raw_input('Please define ' + str(word) + ':')
        global dfn_dict
        return dfn_dict.update({word: definition})
    else:
        print('Word not in dictionary!')

process_book('DQ.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('esperar')

print(dfn_dict.items())

dict.update(word=definition)不会做你认为它做的事。请参见以下示例:

>>> someDict = {}
>>> word = 'foo'
>>> definition = 'bar'
>>> someDict.update(word=definition)
>>> someDict
{'word': 'bar'}

如您所见,尽管您希望首先解析word变量,但此方法将始终更新键word。但这不会起作用,因为您正在向update函数传递一个命名参数,而这些命名参数是按字面意思获取的。

如果要更新等于word值的键,可以这样做:

someDict[word] = definition

dfn_dict.update(word = definition)等同于dfn_dict.update({"word": definition})。您要使用dfn_dict.update({word: definition})

相关问题 更多 >

    热门问题