2016-11-23 59 views
0

我試圖隨機選擇追加到一本詞典,但我的代碼似乎並不奏效。將隨機元素排序爲字典? Python的

我使用的文件(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) 

例如,我想一個 「傑米綠色」 加入到隨機組,如果它隨機選擇「悲傷」,那麼 -

happy, Jennifer Clause 
happy, Jake Foster 
sad, Jonathan Bower 
mad, Penny 
excited, Logan 
awkward, Mason Tyme 
#sad, Jamie Green 

我該如何將它隨機添加到字典中?

謝謝!

+0

你有什麼嘗試?這不是一個「我的代碼」網站。你有沒有讀過'隨機'模塊? –

+0

你想寫字典或文件嗎? – ettanany

+0

是的,我已閱讀過有關它,我不期待任何人爲我編碼。解釋或領導將是綽綽有餘! – naraemee

回答

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()] 

這種方式,你有name值的列表中的每個心情鍵。

關於randomMood功能,還有5月的事情並不好看:

  • if語句應縮進,因爲是功能的一部分。這應該會引發一個IndentationError,但我會假設它將代碼複製到StackOverflow中時發生。
  • 情緒是一個字符串,所以你實際上在做random.choice(mood)是選擇從字符串,它沒有任何意義上的隨機字符。你可能想要從心情列表中選擇,這將是這樣的randomMood = random.choice(moodDict.keys())
  • 因爲我在之前的點解釋,以下行只需更換與情緒,這是沒有意義的隨機字符心情項下的值。
  • 字典沒有任何方法命名append,這應該也拋出一個錯誤。你可能想使用此來替代它:moonDict [randomMood] .append(名稱)
  • 最後,我不明白爲什麼你要求用戶輸入的心情時,它應該被隨機地選擇。

看起來你對Python字典是什麼以及它是如何工作有點困惑。請記住,它將鍵映射到值。在你的代碼中,你的鍵是情緒,值是名字,都以字符串表示。鑰匙是獨一無二的。這意味着如果您爲現有密鑰分配新值,則在該密鑰下映射的舊值會丟失。如果你想在同一個鍵下處理多個值,你應該把鍵映射到一個值集合,比如列表,而不是單個值。

+0

哎呀看來我無意中要求他們輸入!也感謝給我解釋概念,而不僅僅是編碼一切!這更有幫助! – naraemee

+0

也謝謝你澄清我的代碼中的其他問題! – naraemee