HOWTO · Python
在 Python 中的迴圈內將鍵值對新增到字典中
瞭解如何在 Python 的迴圈中將鍵值對新增到字典中。
本頁內容
字典指派可以新增或更新項目:在迴圈中使用 dictionary[key] = value。如果鍵和值分別位於不同的可迭代物件中,可在 for 迴圈裡用 zip() 將它們配成一組。需要索引本身時,則使用 while 迴圈。
在迴圈中將鍵值對加入字典
先建立字典,接著在迴圈逐一處理每組資料時,將每個鍵指派給對應的值。值可以是不同類型的 Python 物件;鍵則必須可雜湊。以下範例會將姓名與分數配對:
使用 zip() 配對鍵和值
每次迭代時,zip(keys, values) 都會從各個可迭代物件中產生一組項目。執行以下範例:
本節中的程式碼以及顯示的標籤或輸出仍為英文。
keys = ["Ada", "Linus", "Grace"]
values = [98, 91, 100]
scores = {}
for key, value in zip(keys, values):
scores[key] = value
print(scores)
{'Ada': 98, 'Linus': 91, 'Grace': 100}
指派會將每個分數存到相配的姓名底下。值也可以是清單、函式或其他物件;只有字典的鍵需要符合可雜湊條件。
需要索引時使用 while 迴圈
當其他操作需要位置資訊時,使用索引的迴圈會很方便。設定停止條件,並在每次迴圈執行後遞增索引:
本節中的程式碼以及顯示的標籤或輸出仍為英文。
keys = ["Ada", "Linus", "Grace"]
values = [98, 91, 100]
scores = {}
index = 0
limit = min(len(keys), len(values))
while index < limit:
scores[keys[index]] = values[index]
index += 1
此處的 limit 可確保迴圈只存取兩個清單都具有的索引位置。若只是要配對資料,使用 for key, value in zip(keys, values) 更精簡,也不必自行管理索引。
處理長度不同的輸入與既有鍵
預設情況下,zip() 會在最短的可迭代物件耗盡時停止。較長輸入中未配對的項目會被略過。如果每個鍵都必須有值,請在迴圈前比較輸入長度,並決定程式遇到長度不一致時應如何處理。
若指派的鍵已存在於字典中,該鍵原有的值會被取代;字典不會建立兩個相同的鍵。若要保留多個值,可將集合型別的物件存為值,再將新值附加其中。鍵必須可雜湊,因此字串、數字,以及由可雜湊項目組成的元組都可用作鍵;可變動的清單和字典則不行。
列印結果並了解複雜度
可以使用 print(scores) 檢視小型字典,也可以迭代 scores.items(),格式化輸出每個鍵和值。範例中的簡單字典表示法會得到固定結果。自訂物件的表示法可能包含記憶體位址;若需要易讀且可重複的輸出,請列印特定屬性。
對於 m 組資料,迴圈會執行 m 次指派;由於每次字典指派平均需要 O(1) 時間,整體平均時間為 O(m)。這是平均情況;發生雜湊碰撞時,個別指派可能會較慢。輸出字典最多包含 m 個不同的鍵,因此額外空間為 O(m)。zip() 迭代器本身只使用常數輔助空間。如果字典原本有 d 個項目,除非某個配對鍵取代既有值,否則這些項目都會保留;最後的字典大小最多為 d + m。