如何在 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
从上述时间来看,*
运算符是最快的。
我们推荐优先使用它,除非你有充分的理由采用其他方法。