使用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获得一个简单的键列表?


当前回答

除了经典(可能更正确)的方法(some_dict.keys())之外,还有一种更“酷”且肯定更有趣的方法:

some_dict = { "foo": "bar", "cool": "python!" }
print( [*some_dict] == ["foo", "cool"] )         # True  

注意:这个解决方案不应该在开发环境中使用;我在这里展示它只是因为我认为从*-操作符-字典的角度来看它非常有趣。此外,我不确定这是否是一个文档化的功能,它的行为可能会在以后的版本中改变:)

其他回答

在不使用keys方法的情况下转换为列表使其更具可读性:

list(newdict)

并且,当循环遍历字典时,不需要key ():

for key in newdict:
    print key

除非你在循环中修改它,这需要事先创建一个键列表:

for key in list(newdict):
    del newdict[key]

在Python 2上,使用keys()会有一个边际的性能提升。

你也可以使用列表推导式:

>>> newdict = {1:0, 2:0, 3:0}
>>> [k  for  k in  newdict.keys()]
[1, 2, 3]

或者,短,

>>> [k  for  k in  newdict]
[1, 2, 3]

注意:在3.7以下的版本中不保证排序(排序仍然只是CPython 3.6的一个实现细节)。

除了经典(可能更正确)的方法(some_dict.keys())之外,还有一种更“酷”且肯定更有趣的方法:

some_dict = { "foo": "bar", "cool": "python!" }
print( [*some_dict] == ["foo", "cool"] )         # True  

注意:这个解决方案不应该在开发环境中使用;我在这里展示它只是因为我认为从*-操作符-字典的角度来看它非常有趣。此外,我不确定这是否是一个文档化的功能,它的行为可能会在以后的版本中改变:)

如果你需要单独存储键,这里有一个解决方案,使用扩展可迭代解包(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

这是在一行代码中获得key List的最佳方法

dict_variable = {1:"a",2:"b",3:"c"}  
[key_val for key_val in dict_variable.keys()]