我目前有一个传递给我的回调的对象,这是一个字典,我必须返回。
调用者在字典上调用obj.setdefault("Server", "Something")
,即使键/值对不存在,它也有默认值。
如何恢复/删除setdefault
(删除默认值)?我的意思是我根本不想在dict中使用键/值对,并且如果键没有退出它似乎没有复杂性,但是由于默认值它总是被添加。
答案 0 :(得分:5)
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
{}
答案 1 :(得分:0)
假设传递给回调时值不在字典中,dict.setdefault
实际上不是问题 - 这个操作是许多可用于更改python字典的操作之一。具体来说,它确保为给定密钥存储SOMETHING,无论如何都可以通过索引分配直接完成。只要你的代码和调用者都保持对同一个字典的引用,你就没有真正的选择,只能信任调用者(以及任何所有其他引用持有者到这本字典)。
字典的可变性是问题,因此可能的解决方案围绕设计中的余地。我只能想到: