如何在Python中将字典键作为列表返回?
2022-09-05 01:04:32
在Python 2.7中,我可以将字典键,值或项作为:list
>>> newdict = {1:0, 2:0, 3:0}
>>> newdict.keys()
[1, 2, 3]
使用Python> = 3.3,我得到:
>>> newdict.keys()
dict_keys([1, 2, 3])
如何使用Python 3获得简单的密钥?list
在Python 2.7中,我可以将字典键,值或项作为:list
>>> newdict = {1:0, 2:0, 3:0}
>>> newdict.keys()
[1, 2, 3]
使用Python> = 3.3,我得到:
>>> newdict.keys()
dict_keys([1, 2, 3])
如何使用Python 3获得简单的密钥?list
Python >= 3.5 替代方案:解压缩到列表文本中 [*newdict]
Python 3.5 引入了新的解压缩泛化 (PEP 448),使您现在可以轻松执行以下操作:
>>> newdict = {1:0, 2:0, 3:0}
>>> [*newdict]
[1, 2, 3]
解包 with 适用于任何可迭代的对象,并且由于字典在迭代时会返回其键,因此您可以通过在列表文本中使用它来轻松创建列表。*
添加即可能有助于使您的意图更加明确,尽管这将花费您函数查找和调用。(老实说,这并不是你真正应该担心的事情)。.keys()
[*newdict.keys()]
*可迭代
语法类似于 do list(可迭代),
其行为最初记录在 Python 参考手册的调用部分中。在 PEP 448 中,对 *iterable
可能出现的位置的限制被放宽,允许将其放置在列表、集合和元组文本中,表达式列表的参考手册也进行了更新以说明这一点。
虽然等同于它更快(至少对于小型字典),因为实际上没有执行函数调用:list(newdict)
%timeit [*newdict]
1000000 loops, best of 3: 249 ns per loop
%timeit list(newdict)
1000000 loops, best of 3: 508 ns per loop
%timeit [k for k in newdict]
1000000 loops, best of 3: 574 ns per loop
对于较大的字典,速度几乎相同(迭代大型集合的开销胜过函数调用的少量成本)。
以类似的方式,您可以创建元组和字典键集:
>>> *newdict,
(1, 2, 3)
>>> {*newdict}
{1, 2, 3}
当心元组大小写中的尾随逗号!