在Python 2.7中,我可以将dictionarykeys、values或items作为一个列表:
>>> newdict = {1:0, 2:0, 3:0}
>>> newdict.keys()
[1, 2, 3]
现在,在Python>;=3.3中,我得到这样的结果:
>>> newdict.keys()
dict_keys([1, 2, 3])
所以,我必须这样做才能得到一个列表:
newlist = list()
for i in newdict.keys():
newlist.append(i)
我想知道,有没有更好的方法返回Python 3中的列表?
list(newdict)
在Python 2和Python 3中都有效,它提供了newdict
中键的简单列表。keys()
不是必需的。(:尝试
list(newdict.keys())
。这将把
dict_keys
对象转换为列表。另一方面,你应该问问自己这是否重要。Pythonic编写代码的方法是假设duck类型(如果它看起来像鸭子,而且嘎嘎叫起来像鸭子,那么它就是鸭子。在大多数情况下,
dict_keys
对象的作用类似于列表。例如:显然,插入运算符可能不起作用,但这对于字典键列表来说没有多大意义。
Python>;=3.5备选方案:解压成列表文本
[*newdict]
Python 3.5引入了新的unpacking generalizations (PEP 448),使您现在可以轻松地:
使用
*
解包可与任何可iterable对象一起使用,并且,由于字典在遍历时返回它们的键,因此可以通过在列表文本中使用它轻松创建列表。添加
.keys()
即[*newdict.keys()]
可能有助于使您的意图更加明确,尽管这将花费您的函数查找和调用。(老实说,这不是你应该真正担心的事情)。*iterable
语法与执行list(iterable)
类似,其行为最初记录在Python参考手册的Calls section中。PEP 448放宽了*iterable
出现位置的限制,允许它也被放在list、set和tuple文本中,因此Expression lists的参考手册也被更新以说明这一点。虽然与
list(newdict)
等价,但由于没有实际执行函数调用,因此速度更快(至少对于小字典而言):对于较大的字典,速度几乎相同(遍历大型集合的开销胜过函数调用的小开销)。
以类似的方式,可以创建元组和字典键集:
小心元组中的尾随逗号!
相关问题 更多 >
编程相关推荐