我有一个字典,其中key是一个元组(class,word)。我想初始化特定类的字典值,而不管特定默认值的单词。 例如:dict = defaultdict(lambda:-1.0)
dict [(' A',这里有任何单词)] =根据lambda表达式的某个常量值
这里的元组(' A',这里有任何一个字) - A是班级,而#34;任何字在这里"可以是任何随机的未知单词。 这是我的尝试,但我无法弄清楚正确的方法: dict = defaultdict(lambda tag,x:some_constant))。
如何使x成为可能取代它的占位符?
答案 0 :(得分:3)
据我了解,您希望字典具有取决于密钥部分的默认值。如果是这样,我认为这样做你想要的:
class MyDict(dict):
def __missing__(self, key):
class_, word = key
self[key] = class_ # Replace this with what you want
return self[key]
现在,MyDict
的行为与普通字典一样,只是根据自定义函数填充缺失值,您必须根据自己的需要进行调整。
例如:
In [22]: d = MyDict()
In [23]: d[(int, 'delta')]
Out[23]: int
In [24]: d[(str, 'gamma')]
Out[24]: str
In [25]: d
Out[25]: {(str, 'gamma'): str, (int, 'delta'): int}
注意一点:当您将get
属性用于缺少密钥的字典时,不调用__missing__
。相反,它将返回您指定的任何内容作为get
的第二个参数,默认为None
。
defaultdict
有人可能会defaultdict
按照您的意愿行事:
dict = defaultdict(lambda tag, x: some_constant))
但是,这不起作用,因为defaultdict
构造函数不接受参数。使用defaultdict
时,无论密钥如何,默认值都必须相同。