如何在 Python 中將字典鍵作為列表獲取

Aliaksei Yursha 2023年1月30日
  1. dict.keys() 獲取 Python 字典鍵
  2. 迴圈獲取 Python 字典鍵
  3. 列表推導式以獲取 Python 字典鍵
  4. Python 字典解包*運算子獲取鍵值
  5. 字典鍵作為列表獲取不同方法的效能比較
如何在 Python 中將字典鍵作為列表獲取

我們在本教程中將來介紹如何將字典中的鍵值以列表形式讀出。

我們有幾種方法可以實現它,每種方法都有不同的效能特徵。

dict.keys() 獲取 Python 字典鍵

dict.keys() 函式返回 dict_keys-字典鍵的可迭代表現。

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> state_capitals.keys()
dict_keys(['California', 'Pennsylvania', 'Texas'])

你可以對 dict_keys 直接進行迭代,而無需將其轉換為列表。

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> for state in state_capitals.keys():
...   print(state)
...
California
Pennsylvania
Texas

例如,如果你需要嚴格按照列表來處理字典鍵,例如,如果你希望能夠使用索引來讀取序列中的特定鍵,則應首先轉換 dict_keys 為列表。

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> list(state_capitals.keys())
['California', 'Pennsylvania', 'Texas']

請注意,如果要獲取鍵值作為列表,則呼叫 dict.keys() 是可選的。由於 Python 字典可在其鍵上進行迭代,因此你可以將字典本身傳遞給列表建構函式。

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> list(state_capitals)
['California', 'Pennsylvania', 'Texas']

迴圈獲取 Python 字典鍵

Python 中字典的一個特殊特性是,當你迭代它們時,便會迭代它們的鍵。因此,你可以通過迭代來簡單地得到所有字典鍵。

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> keys = []
>>> for key im state_capitals:
...   keys.append(key)
...
>>> keys
['California', 'Pennsylvania', 'Texas']

列表推導式以獲取 Python 字典鍵

使用迴圈的語法改進可以使用 Python 的列表推導式。通過列表推導,你可以將以上迴圈壓縮為單行。

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> keys = [key for key in state_capitals]
>>> keys
['California', 'Pennsylvania', 'Texas']

Python 字典解包*運算子獲取鍵值

從 Python 3.5 開始,我們可以使用 unpack *運算子來得到字典鍵。PEP 448-中引入了此功能。

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> keys = [*state_capitals]
>>> keys
['California', 'Pennsylvania', 'Texas']

這種方法的好處是,你可以將字典鍵解包到列表之外的其他集合中,例如元組或集合。

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> keys_tuple = *state_capitals,
>>> keys_tuple
('California', 'Pennsylvania', 'Texas')
>>> keys_set = {*state_capitals}
>>> keys_set
{'California', 'Pennsylvania', 'Texas'}

字典鍵作為列表獲取不同方法的效能比較

上述每種方法的執行時效能都各不相同。

>>> from timeit import timeit
>>> timeit("list(state_capitals.keys())", setup="state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}")
0.25394885599962436
>>> timeit("list(state_capitals)", setup="state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}")
0.17995373999929143
>>> timeit("for key in state_capitals: keys.append(key)", setup="keys = []; state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}")
0.25294865500018204
>>> timeit("[key for key in state_capitals]", setup="state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}")
0.2447525150000729
>>> timeit("[*state_capitals]", setup="state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}")
0.0962776809992647

從上述時間來看,* 運算子是最快的。

我們推薦優先使用它,除非你有充分的理由採用其他方法。

相關文章 - Python Dictionary