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
语法类似于做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}
在元组的情况下要小心尾随逗号!