将随机元素排序到字典中?python

将随机元素排序到字典中?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:

我试图在字典中添加一个随机选项,但我的代码似乎不起作用

我正在使用的文件(mood.txt):

我的代码:

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中的随机字符,这是没有意义的
  • 字典没有任何名为
    append
    的方法,这也会引发错误。您可能希望将其替换为:moonDict[randomMood].append(name)
  • 最后,我不明白为什么你要求用户输入一个应该随机选择的情绪

您似乎对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中的随机字符,这是没有意义的
  • 字典没有任何名为
    append
    的方法,这也会引发错误。您可能希望将其替换为:moonDict[randomMood].append(name)
  • 最后,我不明白为什么你要求用户输入一个应该随机选择的情绪

您似乎对Python字典是什么以及它是如何工作的有些困惑。请记住,它将键映射到值。在代码中,键是情绪,值是名称,两者都用字符串表示。钥匙是独一无二的。这意味着,如果将新值分配给现有键,则该键下映射的旧值将丢失。如果要处理同一个键下的多个值,则应将该键映射到值的集合,如列表,而不是单个值。

您尝试了什么?这不是一个“我的代码”网站。你读过“随机”模块吗?你想写字典还是文件?是的,我读过,我不希望有人为我编码。一个解释或线索就足够了!我正试着给字典写信呢!你试过什么?这不是一个“我的代码”网站。你读过“随机”模块吗?你想写字典还是文件?是的,我读过,我不希望有人为我编码。一个解释或线索就足够了!我正试着给字典写信呢!哎呀,好像我不小心让他们输入了!还感谢您向我解释这些概念,而不仅仅是编写所有内容!!这更有帮助!还感谢您澄清了我代码中的另一个问题!哎呀,好像我不小心让他们输入了!还感谢您向我解释这些概念,而不仅仅是编写所有内容!!这更有帮助!也感谢你澄清了另一个问题