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)。