1

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

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

印刷:

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

在我拥有超过 2.7 的 python 版本之前,我从来没有遇到过这个问题......有什么想法吗?

4

1 回答 1

4

Python 3 返回视图对象

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

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

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

另外,在传递可变对象作为默认参数时要小心:

>>> 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}
于 2013-03-16T03:03:48.760 回答