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

Joe*_*ane 2 dictionary key python-3.x

我一直尝试使用 dict.keys 从我的字典中获取键列表,但它一直给我:

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

印刷:

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

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

Ble*_*der 5

Python 3 返回视图对象

\n\n
\n

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

\n
\n\n

您可以通过将它们传递到以下位置将它们转换为列表(Python 2 行为)list()

\n\n
>>> d = {\'l\': 3, \'y\':1, \'u\':2}\n>>> d.keys()\ndict_keys([\'y\', \'l\', \'u\'])\n>>> list(d.keys())\n[\'y\', \'l\', \'u\']\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
>>> def reverse(PB={\'l\': 3, \'y\':1, \'u\':2}):\n...     PB[\'l\'] += 4\n...     \n...     print(PB)\n... \n>>> reverse()\n{\'y\': 1, \'l\': 7, \'u\': 2}\n>>> reverse()\n{\'y\': 1, \'l\': 11, \'u\': 2}\n>>> reverse()\n{\'y\': 1, \'l\': 15, \'u\': 2}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我默认改为None

\n\n
def reverse(PB=None):\n    if PB is None:\n        PB = {\'l\': 3, \'y\':1, \'u\':2}\n
Run Code Online (Sandbox Code Playgroud)\n