Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.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_Function_Dictionary - Fatal编程技术网

从创建字典的函数中提取字典(python)

从创建字典的函数中提取字典(python),python,function,dictionary,Python,Function,Dictionary,我正在从外部文档导入一个列表,并将该列表输入到字典中。这个问题几乎适用于函数内部与变量关联的所有值。函数完成后,如何从函数中提取信息,而不必将变量指定为全局变量。对不起,如果这个问题不是很清楚,我发音有困难 这是到目前为止的节目。字典“result”在函数中有值,但当我试图从函数外部调用它时,它是空的 fin = open('words.txt') def dictionary(words): result = {} for line in words: result[

我正在从外部文档导入一个列表,并将该列表输入到字典中。这个问题几乎适用于函数内部与变量关联的所有值。函数完成后,如何从函数中提取信息,而不必将变量指定为全局变量。对不起,如果这个问题不是很清楚,我发音有困难

这是到目前为止的节目。字典“result”在函数中有值,但当我试图从函数外部调用它时,它是空的

fin = open('words.txt')

def dictionary(words):
   result = {}
   for line in words:
      result[line] = 'yupp!' # dont care about value at the moment
   return result

word_dict = dictionary(fin)
'the' in word_dict# checking to see if a word is in the dictionary
使用:

将字典返回的值赋给变量结果

请注意,结果是一个全局变量,所以我不确定您所说的with是什么意思 我们必须将变量分配为全局变量

或者

def dictionary(words):
    return dict.fromkeys((word.strip() for word in words), 'yupp')
使用:

将字典返回的值赋给变量结果

请注意,结果是一个全局变量,所以我不确定您所说的with是什么意思 我们必须将变量分配为全局变量

或者

def dictionary(words):
    return dict.fromkeys((word.strip() for word in words), 'yupp')

将函数结果分配给变量:

result = dictionary(fin) # note that this variable does not need to be named 'result'

将函数结果分配给变量:

result = dictionary(fin) # note that this variable does not need to be named 'result'

这里有一种更简洁的方法,在dict构造函数上使用生成器表达式,并使用上下文处理程序来管理文件句柄的打开/关闭

>>> def dictionary(fname='/usr/share/dict/words'):
...   with open(fname) as words:
...     return dict((word.strip(), 'yupp!') for word in words)
... 
>>> my_dictionary = dictionary()
>>> 'the' in my_dictionary
True
>>> my_dictionary['the']
'yupp!'

这里有一种更简洁的方法,在dict构造函数上使用生成器表达式,并使用上下文处理程序来管理文件句柄的打开/关闭

>>> def dictionary(fname='/usr/share/dict/words'):
...   with open(fname) as words:
...     return dict((word.strip(), 'yupp!') for word in words)
... 
>>> my_dictionary = dictionary()
>>> 'the' in my_dictionary
True
>>> my_dictionary['the']
'yupp!'

灯泡我知道我错过了一个关键的东西。我已经做了您建议的更改,但当我检查字典中是否有值时,它根本不会返回任何内容。不是真或假。这可能是因为行以\n结尾。Try line=line.strip。我添加了一些代码来说明我的意思,就是这样。起初,我试着做line.strip,但不把它分配给任何东西。当我把你的线=线.strip放在一起时,它工作得非常好!我需要弄清楚什么时候我需要给某个值赋值,什么时候我不需要。比如a.strip需要被分配给某个对象,而sortedlist不需要。字符串是不可变的。因此,对字符串调用的任何方法都不能改变字符串本身。它必须返回一个新字符串。因此,需要line=line.strip。列表是可变的。一般来说,当您调用可变对象的方法时,它会对该对象进行变异,并且不返回任何值。例如,list.sort对list进行变异并返回None。相反,sorted函数不改变列表,而是返回一个新的排序列表。所以,若你们想改变列表,你们需要list=sortedlist。但你永远不会写那个,因为list.sort就足够了。灯泡我知道我错过了一个关键的东西。我已经做了您建议的更改,但当我检查字典中是否有值时,它根本不会返回任何内容。不是真或假。这可能是因为行以\n结尾。Try line=line.strip。我添加了一些代码来说明我的意思,就是这样。起初,我试着做line.strip,但不把它分配给任何东西。当我把你的线=线.strip放在一起时,它工作得非常好!我需要弄清楚什么时候我需要给某个值赋值,什么时候我不需要。比如a.strip需要被分配给某个对象,而sortedlist不需要。字符串是不可变的。因此,对字符串调用的任何方法都不能改变字符串本身。它必须返回一个新字符串。因此,需要line=line.strip。列表是可变的。一般来说,当您调用可变对象的方法时,它会对该对象进行变异,并且不返回任何值。例如,list.sort对list进行变异并返回None。相反,sorted函数不改变列表,而是返回一个新的排序列表。所以,若你们想改变列表,你们需要list=sortedlist。但你永远不会写那个,因为list.sort就足够了。所以我在检查密钥时让它返回False。我不明白为什么一切都是假的。所以我打印了整本字典,每个单词都有“\n”。我要把它剥掉,抱歉搞混了。你的代码工作得很好!我在错误的框中写了我的评论。所以我在检查密钥时得到了返回False的结果。我不明白为什么一切都是假的。所以我打印了整本字典,每个单词都有“\n”。我要把它剥掉,抱歉搞混了。你的代码工作得很好!我把我的评论写错了地方。