如何在 Python 中將字典鍵作為列表獲取
Aliaksei Yursha
2023年1月30日
-
dict.keys()
獲取 Python 字典鍵 - 迴圈獲取 Python 字典鍵
- 列表推導式以獲取 Python 字典鍵
-
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
從上述時間來看,*
運算子是最快的。
我們推薦優先使用它,除非你有充分的理由採用其他方法。