将随机元素排序到字典中?python
我试图在字典中添加一个随机选项,但我的代码似乎不起作用 我正在使用的文件(mood.txt): 我的代码:将随机元素排序到字典中?python,python,dictionary,Python,Dictionary,我试图在字典中添加一个随机选项,但我的代码似乎不起作用 我正在使用的文件(mood.txt): 我的代码: def theFile(): moodFile = open("mood.txt") theMood = moodFile.readlines() moodFile.close() return(theMood) def makeTheDict(myFile): moodDict = {} for lines in myFile:
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)
例如,我想在随机分组中添加一个“杰米·格林”,如果它随机选择了“悲伤”,那么-
happy, Jennifer Clause
happy, Jake Foster
sad, Jonathan Bower
mad, Penny
excited, Logan
awkward, Mason Tyme
#sad, Jamie Green
如何将其随机添加到词典中
谢谢大家! 似乎您想将字符串映射到字符串列表,但实际上您是将字符串映射到字符串 请看这一行:
moodDict[mood] = name.strip()
这里您将字符串mood
映射到字符串name.strip()
。如果此时已有一个名称映射到当前情绪,则旧值将被替换并丢失。在你的文件样本中,詹妮弗和杰克都很高兴。在for循环的第一次迭代中,您有:
moodDict["happy"] = "Jennifer Clause"
然后,在第二步,你有
moodDict["happy"] = "Jake Foster"
在这里,“杰克·福斯特”取代了“詹妮弗条款”。由于情绪可以重复,你可能想要的是这样的:
if mood in moodDict:
moonDict[mood].append(name.strip())
else:
moonDict[mood] = [name.strip()]
这样,每个情绪键都有一个名称值列表
关于randomMood函数,可能有些事情看起来不太好:
- if语句应该缩进,因为它是函数的一部分。这应该会抛出一个IndentationError,但我假设它是在您将代码复制到StackOverflow中时发生的
- 心情是一个字符串,所以在
是从该字符串中选择一个随机字符,这没有任何意义。您可能希望从情绪列表中进行选择,这类似于以下内容random中实际执行的操作。choice(Mood)
randomMood=random.choice(moodDict.keys())
- 由于我在上一点中的解释,下面的一行只是将mood键下的值替换为mood中的随机字符,这是没有意义的
- 字典没有任何名为
的方法,这也会引发错误。您可能希望将其替换为:moonDict[randomMood].append(name)append
- 最后,我不明白为什么你要求用户输入一个应该随机选择的情绪
您似乎对Python字典是什么以及它是如何工作的有些困惑。请记住,它将键映射到值。在代码中,键是情绪,值是名称,两者都用字符串表示。钥匙是独一无二的。这意味着,如果将新值分配给现有键,则该键下映射的旧值将丢失。如果要处理同一个键下的多个值,则应将该键映射到值的集合,如列表,而不是单个值。似乎要将字符串映射到字符串列表,但实际上是将字符串映射到字符串 请看这一行:
moodDict[mood] = name.strip()
这里您将字符串mood
映射到字符串name.strip()
。如果此时已有一个名称映射到当前情绪,则旧值将被替换并丢失。在你的文件样本中,詹妮弗和杰克都很高兴。在for循环的第一次迭代中,您有:
moodDict["happy"] = "Jennifer Clause"
然后,在第二步,你有
moodDict["happy"] = "Jake Foster"
在这里,“杰克·福斯特”取代了“詹妮弗条款”。由于情绪可以重复,你可能想要的是这样的:
if mood in moodDict:
moonDict[mood].append(name.strip())
else:
moonDict[mood] = [name.strip()]
这样,每个情绪键都有一个名称值列表
关于randomMood函数,可能有些事情看起来不太好:
- if语句应该缩进,因为它是函数的一部分。这应该会抛出一个IndentationError,但我假设它是在您将代码复制到StackOverflow中时发生的
- 心情是一个字符串,所以在
是从该字符串中选择一个随机字符,这没有任何意义。您可能希望从情绪列表中进行选择,这类似于以下内容random中实际执行的操作。choice(Mood)
randomMood=random.choice(moodDict.keys())
- 由于我在上一点中的解释,下面的一行只是将mood键下的值替换为mood中的随机字符,这是没有意义的
- 字典没有任何名为
的方法,这也会引发错误。您可能希望将其替换为:moonDict[randomMood].append(name)append
- 最后,我不明白为什么你要求用户输入一个应该随机选择的情绪
您似乎对Python字典是什么以及它是如何工作的有些困惑。请记住,它将键映射到值。在代码中,键是情绪,值是名称,两者都用字符串表示。钥匙是独一无二的。这意味着,如果将新值分配给现有键,则该键下映射的旧值将丢失。如果要处理同一个键下的多个值,则应将该键映射到值的集合,如列表,而不是单个值。您尝试了什么?这不是一个“我的代码”网站。你读过“随机”模块吗?你想写字典还是文件?是的,我读过,我不希望有人为我编码。一个解释或线索就足够了!我正试着给字典写信呢!你试过什么?这不是一个“我的代码”网站。你读过“随机”模块吗?你想写字典还是文件?是的,我读过,我不希望有人为我编码。一个解释或线索就足够了!我正试着给字典写信呢!哎呀,好像我不小心让他们输入了!还感谢您向我解释这些概念,而不仅仅是编写所有内容!!这更有帮助!还感谢您澄清了我代码中的另一个问题!哎呀,好像我不小心让他们输入了!还感谢您向我解释这些概念,而不仅仅是编写所有内容!!这更有帮助!也感谢你澄清了另一个问题