如何使用.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] == 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时,所有列表都是空的。不过,我知道名单已填写完毕。
发布于 2017-12-20 21:29:16
在使用foundwords时,不会复制.setdefault()列表,因此所有字典元素都引用相同的列表。然后使用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))https://stackoverflow.com/questions/47914515
复制相似问题