HOWTO · Python

如何在 Python 字典中獲取第一個鍵

學習使用 next()、列表轉換、for 迴圈以及針對空字典的安全預設值,獲取 Python 字典迭代器產生的第一個鍵。

本頁內容

要獲取 Python 字典產生的第一個鍵,請呼叫 next(iter(my_dict))。這會直接從字典迭代器中讀取一個鍵。在這個範例中,字典包含一個名字和一個城市,程式會印出最先產生的鍵:

my_dict = {"name": "Ada", "city": "London"}
first_key = next(iter(my_dict))
print(first_key)

字典中「第一個」的含義

字典不為鍵提供數字索引。這裡的「第一個」是指 Python 迭代字典時產生的第一個鍵。對於有序字典,迭代遵循其插入順序,因此第一個鍵是最早插入的鍵。如果某個映射使用不同的迭代順序,「第一個」則遵循該映射的迭代行為。這個定義描述的是迭代結果;它並不假設每個映射都以相同方式排列其鍵。

字典迭代預設產生鍵。因此,你可以直接將字典傳遞給 iter() 或 for 迴圈。你不需要先呼叫 keys()。當你需要單獨檢查或重用鍵檢視時,my_dict.keys() 方法會傳回鍵的動態檢視。

使用 next() 獲取第一個鍵

使用 iter() 在字典上建立一個迭代器,然後使用 next() 檢索它的下一個元素。由於字典迭代器產生鍵,這種方法讀取一個鍵,而不必建立包含所有鍵的單獨列表。對於非空字典,當你只需要一個鍵時,這是簡潔的選擇:

my_dict = {"name": "Ada", "city": "London"}
first_key = next(iter(my_dict))
print(first_key)

first_key 的值是迭代產生的第一個鍵。next() 還接受一個可選的預設值,當字典可能沒有鍵時這很有用。最後一節展示了這種形式。

使用 list() 獲取第一個鍵

如果你還需要將鍵作為列表使用,請將字典轉換為列表並選擇索引 0。傳遞給 list() 的字典會產生它的鍵,因此不需要先呼叫 keys():

my_dict = {"name": "Ada", "city": "London"}
first_key = list(my_dict)[0]
print(first_key)

這種轉換會在選擇一個鍵之前具體化每個鍵。當你只需要一個鍵時,請使用迭代器方法。當結果列表還將被索引、切片或用於其他列表操作時,列表轉換很有用。索引 0 要求列表包含一個鍵,因此當字典可能為空時,這種形式不適用,除非你先檢查。

使用 for 迴圈獲取第一個鍵

for 迴圈直接迭代字典鍵。賦予第一個鍵,然後使用 break 在該次迭代後停止:

my_dict = {"name": "Ada", "city": "London"}
for key in my_dict:
    first_key = key
    break
print(first_key)

這種方法適用於已經使用迴圈的程式碼,或者需要在停止前用鍵執行某項操作的程式碼。它避免了將所有鍵轉換為列表。當值不被使用時,迴圈不需要 items()。如果字典不包含鍵,迴圈主體永遠不會執行,因此之後使用 first_key 的程式碼應該考慮這種可能性。

處理空字典

當字典沒有鍵時呼叫 next(iter(my_dict)) 會引發 StopIteration。向 next() 傳遞第二個引數,以傳回一個替代值:

my_dict = {}
first_key = next(iter(my_dict), None)
print(first_key)

在這裡,None 是替代值。選擇一個不會與有效字典鍵混淆的預設值。如果 None 在你的資料中可能是一個鍵,請建立一個唯一物件作為哨兵,並將其用作預設值:

my_dict = {"name": "Ada", "city": "London"}
sentinel = object()
first_key = next(iter(my_dict), sentinel)
if first_key is sentinel:
    print("No keys")
else:
    print(first_key)

使用 list(my_dict)[0] 的列表方法沒有預設引數,當沒有鍵時會引發 IndexError。當內聯的替代值使空輸入行為更易於處理時,請使用 next(iter(my_dict), default)。