dict.keys的问题不是打印列表而是打印列表视图

时间:2013-03-16 02:57:25

标签: dictionary python-3.x key

我一直试图通过使用dict.keys从我的dict中获取一个键列表,但它一直在给我:

def reverse(PB = {'l': 3, 'y':1, 'u':2}): print(PB.keys())

打印:

dict_keys(['u', 'l', 'y'])

在我拥有超过2.7的python版本之前,我从未遇到过这个问题...任何想法?

1 个答案:

答案 0 :(得分:4)

Python 3返回view objects

  

dict.keys()dict.values()dict.items()返回的对象是查看对象。它们提供了字典条目的动态视图,这意味着当字典更改时,视图会反映这些更改。

您可以将它们传递到list()中,将它们转换为列表(Python 2行为):

>>> d = {'l': 3, 'y':1, 'u':2}
>>> d.keys()
dict_keys(['y', 'l', 'u'])
>>> list(d.keys())
['y', 'l', 'u']

另外,小心传递mutable objects as default arguments

>>> def reverse(PB={'l': 3, 'y':1, 'u':2}):
...     PB['l'] += 4
...     
...     print(PB)
... 
>>> reverse()
{'y': 1, 'l': 7, 'u': 2}
>>> reverse()
{'y': 1, 'l': 11, 'u': 2}
>>> reverse()
{'y': 1, 'l': 15, 'u': 2}

我默认为None

def reverse(PB=None):
    if PB is None:
        PB = {'l': 3, 'y':1, 'u':2}