我目前有一个对象传递给我的回调,这是一个字典,我必须返回。词典:恢复/删除setdefault
调用者在字典上调用obj.setdefault("Server", "Something")
,因此即使键/值对不存在,它也具有默认值。
我该如何恢复/删除那个setdefault
(删除默认值)?我的意思是我只是不想在字典中使用这个键/值对,并且如果该键没有退出,它似乎没有复杂性,但总是因为缺省值而添加它。
我目前有一个对象传递给我的回调,这是一个字典,我必须返回。词典:恢复/删除setdefault
调用者在字典上调用obj.setdefault("Server", "Something")
,因此即使键/值对不存在,它也具有默认值。
我该如何恢复/删除那个setdefault
(删除默认值)?我的意思是我只是不想在字典中使用这个键/值对,并且如果该键没有退出,它似乎没有复杂性,但总是因为缺省值而添加它。
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
并不是真正的问题 - 该操作是许多可用于更改Python字典的操作之一。具体来说,它确保了SOMETHING被存储在给定的键上,这可以通过索引赋值直接完成。只要你的代码和调用者都保持对同一个字典的引用,你就没有真正的选择,只能相信调用者(以及任何其他的参考持有者)。
字典的易变性是个问题,所以可能的解决方案围绕着设计中的余地。我只能想到:
感谢您的指针。有一次,我做了,但我决定坚持简单而直接。编辑。 –
只是删除像任何其他项? 'del obj ['Server']'? – user2357112
只有在默认情况下才想删除它吗? – zondo
可能是一个XY问题。如果你不想让缺省值出现在字典中,不要使用'setdefault(key,default)',而是'get(key,default)'。 –