python字典的默认行为是在字典中创建一个新键(如果该键不存在)。例如:
d = {}
d['did not exist before'] = 'now it does'
这在大多数情况下都很好,但是如果字典中没有键,我希望python什么也不做,那该怎么办呢?在我的情况下:
for x in exceptions:
if masterlist.has_key(x):
masterlist[x] = False
换句话说,我不希望异常中的一些不正确的元素破坏我的主列表。这就像它得到的那样简单吗?我感觉我应该能够在for循环中的一行代码中做到这一点(即,不需要显式检查x是masterlist的键)
更新:对我来说,我的问题是关于列表和字典之间缺乏可比性。例如:
l = []
l[0] = 2 #fails
l.append(2) #works
有了子类化的答案,您可以修改字典(可能是"safe_dict“或"explicit_dict”,以执行类似的操作:
d = {}
d['a'] = '1' #would fail in my world
d.insert('a','1') #what my world is missing
发布于 2011-06-23 23:41:39
你可以继承一个dict
类,重写它的__setitem__
来检查key是否存在(或者对只修补一个实例做同样的事情)。
示例类:
class a(dict):
def __init__(self, *args, **kwargs):
dict.__init__(self, *args, **kwargs)
dict.__setitem__(self, 'a', 'b')
def __setitem__(self, key, value):
if self.has_key(key):
dict.__setitem__(self, key, value)
a = a()
print a['a'] # prints 'b'
a['c'] = 'd'
# print a['c'] - would fail
a['a'] = 'e'
print a['a'] # prints 'e'
您还可以使用一些函数来简化设置值,而无需检查是否存在。
然而,我认为它会更短...除非你在很多地方需要它,否则不要使用它。
发布于 2011-06-23 23:38:39
您可以使用.update
masterlist.update((x, False) for x in exceptions if masterlist.has_key(x))
发布于 2011-06-23 23:38:51
您也可以使用in
而不是has_key
,这会更好一些。
for x in exceptions:
if x in masterlist:
masterlist[x] = False
但我不认为使用if
语句来实现此目的有什么问题。
https://stackoverflow.com/questions/6456718
复制相似问题