Python >= 3.5 替代方案:解压成列表文字 [*newdict]
Python 3.5 引入了新的解包概括(PEP 448),让您现在可以轻松地执行以下操作:
>>> newdict = {1:0, 2:0, 3:0}
>>> [*newdict]
[1, 2, 3]
解包*
适用于任何可迭代的对象,并且由于字典在迭代时返回它们的键,因此您可以通过在列表文字中使用它来轻松创建列表。
添加.keys()
ie[*newdict.keys()]
可能有助于使您的意图更加明确,尽管它会花费您函数查找和调用。(老实说,这不是您真正应该担心的事情)。
*iterable
语法类似于doing ,
其list(iterable)
行为最初记录在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}
当心元组案例中的尾随逗号!