我正在尝试将随机选择附加到字典中,但我的代码似乎不起作用。
我正在使用的文件(mood.txt):
happy, Jennifer Clause
happy, Jake Foster
sad, Jonathan Bower
mad, Penny
excited, Logan
awkward, Mason Tyme
我的代码:
def theFile():
moodFile = open("mood.txt")
theMood = moodFile.readlines()
moodFile.close()
return(theMood)
def makeTheDict(myFile):
moodDict = {}
for lines in myFile:
(mood, name) = lines.split(",")
moodDict[mood] = name.strip()
return(moodDict)
def randomMood(name, mood, moodDict):
if mood in moodDict:
randomMood = random.choice(mood)
moodDict[mood] = randomMood
moodDict.append(name, randomMood)
print(name, "has been put in the", randomMood, "group")
def main():
moodFile = theFile()
moodDict = makeTheDict(moodFile)
name = input("Choose a name: ")
newMood = input("Choose a mood: ")
randomMood(name, newMood, moodDict)
例如,我想将一个“Jamie Green”添加到一个随机组中,如果它随机选择“sad”,那么 -
happy, Jennifer Clause
happy, Jake Foster
sad, Jonathan Bower
mad, Penny
excited, Logan
awkward, Mason Tyme
#sad, Jamie Green
我如何随机将其附加到字典中?
谢谢!
答案 0 :(得分:2)
您似乎希望将字符串映射到字符串列表,而不是将字符串映射到字符串。
看看这一行:
moodDict[mood] = name.strip()
您将字符串mood
映射到字符串name.strip()
。如果此时已经有一个映射到当前情绪的名称,则旧值将被替换并丢失。在你的文件样本中,Jennifer和Jake都很高兴。在for循环的第一次迭代中,你有:
moodDict["happy"] = "Jennifer Clause"
然后,在第二步,你有。
moodDict["happy"] = "Jake Foster"
这里“Jake Foster”取代了“Jennifer Clause”。由于情绪可以重复,你可能想要的是这样的:
if mood in moodDict:
moonDict[mood].append(name.strip())
else:
moonDict[mood] = [name.strip()]
这样,对于每个心情键,您都有一个名称值列表。
关于randomMood函数,有些东西看起来不太好:
random.choice(mood)
中实际做的是从该字符串中选择一个随机字符,这没有任何意义。您可能希望从心情列表中进行选择,这类似于randomMood = random.choice(moodDict.keys())
。append
的方法,这也应该抛出错误。您可能希望将其替换为:moonDict [randomMood] .append(name)看起来你对Python词典是什么以及它是如何工作有点困惑。请记住,它将键映射到值。在您的代码中,您的键是心情,值是名称,两者都表示为字符串。钥匙是独一无二的。这意味着,如果为现有键分配新值,则该键下映射的旧值将丢失。如果要在同一个键下处理多个值,则应将键映射到值集合(如列表),而不是单个值。