使用Python 2.7,我可以以列表的形式获取字典的键、值或项:
>>> newdict = {1:0, 2:0, 3:0}
>>> newdict.keys()
[1, 2, 3]
使用Python >= 3.3,我得到:
>>> newdict.keys()
dict_keys([1, 2, 3])
如何使用Python 3获得一个简单的键列表?
使用Python 2.7,我可以以列表的形式获取字典的键、值或项:
>>> newdict = {1:0, 2:0, 3:0}
>>> newdict.keys()
[1, 2, 3]
使用Python >= 3.3,我得到:
>>> newdict.keys()
dict_keys([1, 2, 3])
如何使用Python 3获得一个简单的键列表?
当前回答
你可以像下面这样使用简单的方法
keys = newdict.keys()
print(keys)
其他回答
这将把dict_keys对象转换为一个列表:
list(newdict.keys())
另一方面,你应该问问自己这是否重要。假设鸭子输入是python式的——如果它看起来像一只鸭子,它的叫声像一只鸭子,它就是一只鸭子。dict_keys对象可以像列表一样迭代。例如:
for key in newdict.keys():
print(key)
注意,dict_keys不支持插入newdict[k] = v,尽管您可能不需要它。
是的,在python3中有一个更好和最简单的方法来做到这一点。X
使用inbuild list()函数
#Devil
newdict = {1:0, 2:0, 3:0}
key_list = list(newdict)
print(key_list)
#[1, 2, 3]
list(newdict)在Python 2和Python 3中都可以使用,在newdict中提供一个简单的键列表。Keys()不是必需的。
如果你需要单独存储键,这里有一个解决方案,使用扩展可迭代解包(Python3.x+),它需要的输入比迄今为止提出的其他解决方案都要少:
newdict = {1: 0, 2: 0, 3: 0}
*k, = newdict
k
# [1, 2, 3]
Operation | no. Of characters |
---|---|
k = list(d) |
9 characters (excluding whitespace) |
k = [*d] |
6 characters |
*k, = d |
5 characters |
Python >= 3.5 alternative: unpack into list literal [*newdict]
Python 3.5引入了新的解包泛化(PEP 448),允许您现在轻松地执行:
>>> newdict = {1:0, 2:0, 3:0}
>>> [*newdict]
[1, 2, 3]
使用*解包适用于任何可迭代的对象,由于字典在遍历时返回它们的键,因此您可以通过在列表文本中使用它轻松地创建列表。
添加.keys(),即[*newdict.keys()]可能有助于使您的意图更加明确,但它将花费您查找和调用函数的时间。(老实说,这不是你真正应该担心的事情)。
*iterable语法类似于doing list(iterable),它的行为最初记录在Python参考手册的Calls部分。在PEP 448中,对*iterable出现位置的限制放宽了,允许它也被放置在list, set和tuple文字中,表达式列表的参考手册也更新了这一点。
虽然相当于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}
注意在元组情况下的尾随逗号!