字典:恢复/删除setdefault

时间:2016-08-06 19:58:32

标签: python python-3.x dictionary

我目前有一个传递给我的回调的对象,这是一个字典,我必须返回。

调用者在字典上调用obj.setdefault("Server", "Something"),即使键/值对不存在,它也有默认值。

如何恢复/删除setdefault(删除默认值)?我的意思是我根本不想在dict中使用键/值对,并且如果键没有退出它似乎没有复杂性,但是由于默认值它总是被添加。

2 个答案:

答案 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,无论如何都可以通过索引分配直接完成。只要你的代码和调用者都保持对同一个字典的引用,你就没有真正的选择,只能信任调用者(以及任何所有其他引用持有者到这本字典)。

字典的可变性是问题,因此可能的解决方案围绕设计中的余地。我只能想到:

  • 在将字典传递给回调时复制字典,和/或
  • 将返回值更改为字典的副本或(只读)视图