2014-09-01 55 views
0

我試着長時間搜索這個問題的答案。 我到處試過,但可能是我用錯誤的關鍵字搜索,如果是的話,請原諒我問一個愚蠢的或已經回答的問題。.pop()字典錯誤

我想在python 2.2中彈出一個字典。 以下是我的代碼片段,我試圖運行:

ABRA= {} 
ABRA[0] = ['MENU', ['TV', 'MENU']] 
ABRA[1] = ['TV', 'PC', ['RM', 'LM']] 
count = 0 
KADABRA = ABRA.pop(count).pop() 
print(str(KADABRA)) 
print(len(KADABRA)) 
count += 1 
KADABRA = ABRA.pop(count) 
print(str(KADABRA)) 

當我像鍵盤在線翻譯中輸入驗證碼,它的工作原理,我得到所需的輸出,當我上運行服務器,我希望它運行,它不會。 我得到以下錯誤:

AttributeError ('dict' object has no attribute 'pop').

我看不到代碼中的一個錯誤,或者在我打電話的流行方式。 我甚至試圖刪除'雙'流行音樂。 仍然是一個錯誤。 如果我只是讓一個列表,而不是像這樣的字典:

ABRA = ['MENU', ['TV', 'MENU']] 
KADABRA = ABRA.pop() 
print(str(KADABRA)) 
print(len(KADABRA)) 

然後它的工作原理,我得到正確的打印效果。 但我不想列出清單,而是一個字典。 我見過用字典彈出的例子。 所以我的問題是爲什麼我不能彈出我的服務器上的字典和/或是否有替代彈出的字典?

回答

2

dict.pop() documentation

New in version 2.3.

換言之,存在在Python 2.2沒有這樣的方法。

_sentinel = object() 

def pop_dict(d, k, default=_sentinel): 
    try: 
     v = d[k] 
     del d[k] 
     return v 
    except KeyError: 
     if default is _sentinel: 
      raise 
     return default 

以此爲:

你可以自己實現

pod_dict(ABRA, count) 
+0

感謝您回覆,但作爲一個問題提出來跟進: 我的服務器還否認使用嘗試除了,是否有一個優雅的解決方案來檢查密鑰是否不在字典? – 2014-09-01 11:53:40

+0

@MartijnClaes:然後請求允許而不是原諒:'如果k在d:'。 – 2014-09-01 11:55:38

+0

@MartijnClaes:然而,這種拒絕使用'try ... except'的奇怪服務器是什麼? – 2014-09-01 11:56:57