2013-03-16 130 views
1

我一直在嘗試使用dict.keys拿到鑰匙我的字典的名單的看法,但它一直給我:問題dict.keys不打印列表,但打印列表的

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

打印:

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

我從來沒有這個問題之前,我有一個Python版本超出2.7 ...任何想法?

回答

4

的Python 3返回view objects

目的通過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'] 

另外,要小心路過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} 
+1

+1打我吧 – 2013-03-16 03:04:39

+0

非常感謝你的回答!是一個很大的幫助。 – 2013-05-04 02:47:55