簡體   English   中英

對 Python 速成班中的字典輸入示例感到困惑

[英]Confused on dictionary input example in Python Crash Course

我正在學習 Python 速成課程,在第 8 章中,作者給出了以下代碼作為用用戶輸入填充字典的示例。 我對他將響應存儲到字典中的步驟感到困惑,在我看來,他似乎只保存了一個“響應”,它是鍵“名稱”下的“響應”字典中的不可變數據. 我錯過了如何將名稱輸入和響應輸入放入字典中。

這對我來說似乎沒有意義,但這就是我迄今為止對這段旅程的喜愛,在看似無意義的事情中找到意義。 謝謝你幫我揭開這個世界的神秘面紗。

responses = {}

# Set a flag to indicate that polling is active.
polling_active = True

while polling_active:
    #Prompt for the person's name and response.
    name = input("\nWhat is your name? ")
    response = input("Which mountain would you like to climb someday? ")

    #Store the response in the dictionary:
    responses[name] = response

    #Find out if anyone else is going to take the poll.
    repeat = input("Would you like to let another person respond? (yes/no) ")
    if repeat == 'no':
        polling_active = False

#Polling is complete.  Show the results.
print("\n--- Poll Results ---")
for name, response in responses.items():
    print(name + " would like to climb " + response + ".")

在最基本的解釋中,字典將任意值與任意鍵相關聯。 因此,作者實際所做的是將用戶的響應與他們的姓名相關聯。 作者通過使用名稱作為鍵和響應作為值來做到這一點。 像這樣使用字典是相當普遍的。

如果要檢索數組中的值,則必須知道它的鍵。 但是,您可以使用dictionary.items()檢索所有鍵值對。 這樣,作者可以獲得這兩個相關的數據(名稱和響應)。

如果這回答了您的問題,您可以將其標記為正確。 如果您覺得這個答案需要更多解釋,您也可以發表評論。

字典的特點是您可以像這樣更改鍵的值: dictionary[key] = value 如果密鑰不存在,它將簡單地創建一個新密鑰。 您不需要任何append ,例如用於列表的 append 。 您寫responses[name] = response的那一行是有效的,因為它停留在一個while 循環中。 循環再次運行后,它會詢問另一個輸入並將舊name替換為新name ,並將舊response替換為新response 總之,如果名稱不在字典中,則每次循環運行時都會添加名稱和響應。 如果名稱在那里,那么如果它與舊的不同,它將簡單地更改其值response

這回答了你的問題了嗎?

nameresponse是用輸入數據填充的變量名稱,比如說'John''Kalimanjaro'

現在, 'John''Kalimanjaro'確實是不可變的,但這並不意味着您不能在下一個循環中替換存儲在nameresponse中的值。 如果需要,您可以為name指定一個新值,也可以是不可變的。

一種可能的混淆來源可能是您開始使用諸如responses['John'] = 'Kalimanjaro'類的語句來學習字典,其中鍵和值都是字符串。 現在您正在做responses[name] = response (在nameresponse周圍沒有引號)。 因此,您創建了一個名為任何存儲在name中的鍵和一個包含任何存儲在response中的值。

如果在下一次迭代中name的值被替換為'Maria'並且response變為'Andes' ,則新的responses[name] = response將等效於responses['Maria'] = 'Andes'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM