簡體   English   中英

字典:還原/刪除setdefault

[英]Dictionary: Revert/remove setdefault

我目前有一個傳遞給回調函數的對象,該對象是字典,必須返回。

調用obj.setdefault("Server", "Something")在字典上稱為obj.setdefault("Server", "Something") ,因此即使鍵/值對不存在,調用程序也具有默認值。

如何還原/刪除該setdefault (刪除默認值)? 我的意思是我只是不想在dict中使用該鍵/值對,並且如果鍵不退出,它似乎沒有復雜性,但是由於默認值,它總是被添加。

setdefault方法將Server鍵的值設置為Something (只要Server鍵不在詞典中)。 您可以簡單地從字典中刪除Server密鑰:

if 'Server' in obj: del obj['Server']

如果您不想在服務器密鑰的值不同於Something時刪除服務器密鑰,請執行以下操作:

if obj['Server'] == 'Something': del obj['Server']

但是,您無法確定Server的值是作為默認值還是作為鍵值對的普通設置添加到字典中的。 這是因為在調用setdefault ,字典將保留鍵值對,而沒有任何關於如何添加鍵值的指示。

示范:

>>>d = {}
>>>d.setdefault("Server", "Something")
>>>d
{'Server': 'Something'}
>>>del d['Server']
>>>d
{}

假設在傳遞給回調dict.setdefault時該值不在字典中, dict.setdefault並不是真正的問題-此操作是可用於更改python字典的眾多操作之一。 特別是,它確保為給定的密鑰存儲了一些東西,無論如何都可以使用索引分配直接完成。 只要您的代碼和調用者都維護對同一詞典的引用,您別無選擇,只能信任調用者(以及該詞典的所有其他引用持有者)。

字典的可變性是問題所在,因此可能的解決方案圍繞設計中的余地。 我只能想到:

  • 將字典傳遞到回調中時復制它,和/或
  • 將返回值更改為字典的副本或(只讀)視圖

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM