如何使用lambda表达式初始化字典中的键值对?

时间:2014-09-20 05:36:12

标签: python-2.7 dictionary lambda

我有一个字典,其中key是一个元组(class,word)。我想初始化特定类的字典值,而不管特定默认值的单词。 例如:dict = defaultdict(lambda:-1.0)

dict [(' A',这里有任何单词)] =根据lambda表达式的某个常量值

这里的元组(' A',这里有任何一个字) - A是班级,而#34;任何字在这里"可以是任何随机的未知单词。 这是我的尝试,但我无法弄清楚正确的方法: dict = defaultdict(lambda tag,x:some_constant))。

如何使x成为可能取代它的占位符?

1 个答案:

答案 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时,无论密钥如何,默认值都必须相同。