Python .setdefault,由函数填充列表
如何使用.setdefault,默认值是我在函数中填充的列表?比如说,Python .setdefault,由函数填充列表,python,arrays,list,dictionary,Python,Arrays,List,Dictionary,如何使用.setdefault,默认值是我在函数中填充的列表?比如说, import random foundwords = [] with open("text", "r") as file: contents = file.read().replace('\n',' ') words = contents.split(' ') def findwords(word): for i in range(len(words) - 1): if words[i]
import random
foundwords = []
with open("text", "r") as file:
contents = file.read().replace('\n',' ')
words = contents.split(' ')
def findwords(word):
for i in range(len(words) - 1):
if words[i] == word:
if not words[i + 1] == '':
foundwords.append(words[i + 1])
wordsDict = {}
for i in range(len(words) - 1):
findwords(words[i])
wordsDict.setdefault(words[i], foundwords)
del foundwords[:]
def assemble():
start = words[random.randint(0, len(words))]
print(start.capitalize())
assemble()
当我检查wordsDict时,所有列表都是空的。但是,我知道列表已填充。使用.setdefault时,您没有复制foundwords列表,因此所有字典元素都引用同一个列表。然后使用del foundwords[:]删除该列表中的所有元素,以便它们都引用该空列表 将列表添加到词典时,请将其复制一份
for word in words:
findwords(word)
wordsDict.setdefault(word, foundwords[:])
del foundwords[:]
更好的做法是更改findwords,使其返回一个新列表,而不是写入全局变量
def findwords(word):
foundwords = []
for i in range(len(words) - 1):
if words[i] == word:
if not words[i + 1] == '':
foundwords.append(words[i + 1])
return foundwords
for words in words:
wordsDict.setdefault(word, findwords(word))
IMHO两种方法都不是最优的,因为调用函数或复制列表时,即使值在dict中。最好不要使用setdefault,而是使用简单的if。汇编函数与此问题有什么关系?