如何在 Python 中将字典键作为列表获取

Aliaksei Yursha 2023年1月30日 2019年11月9日
  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