捎帶上sqreept的回答,下面是表現爲所需的dict
一個子類:
class DictNoNone(dict):
def __setitem__(self, key, value):
if key in self or value is not None:
dict.__setitem__(self, key, value)
d = DictNoNone()
d["foo"] = None
assert "foo" not in d
這將允許現有的密鑰的值是改變至None
,但將None
分配給不存在的密鑰是無操作的。如果你想設置的項目None
到從詞典中刪除它,如果它已經存在,你可以這樣做:如果您在施工期間通過他們在None
可以得到
def __setitem__(self, key, value):
if value is None:
if key in self:
del self[key]
else:
dict.__setitem__(self, key, value)
值。如果你想避免這種情況,添加一個__init__
方法把它們過濾掉:
def __init__(self, iterable=(), **kwargs):
for k, v in iterable:
if v is not None: self[k] = v
for k, v in kwargs.iteritems():
if v is not None: self[k] = v
你也可以使它通用寫,所以你可以傳中所需的條件生成字典時:
class DictConditional(dict):
def __init__(self, cond=lambda x: x is not None):
self.cond = cond
def __setitem__(self, key, value):
if key in self or self.cond(value):
dict.__setitem__(self, key, value)
d = DictConditional(lambda x: x != 0)
d["foo"] = 0 # should not create key
assert "foo" not in d
如果有一個可以接受的默認值,那麼可以使用橙色:橙色,如果橙色的默認語法。 – jpm