lambda函数返回要在defaultdi中使用的键值

2024-09-30 04:39:50 发布

您现在位置:Python中文网/ 问答频道 /正文

功能集合.defaultdict返回一个默认值,如果字典中没有键,则可以由我自己生成的lambda函数定义该值。在

现在,我希望我的defaultdict返回未修改的键值,如果该键值不存在的话。 因此,我使用一个lambda标识函数lambda x:x。在

>>>translation=defaultdict(lambda x:x)
>>>translation['Haus']='maison'
>>>translation['computer']='ordinateur'
>>>translation['computer']
'ordinateur'

然而,当我给我的defaultdict提供一个至今没有的密钥时:

^{pr2}$

我希望defaultdict翻译返回“email”。然而,Python2.7指出:

TypeError: <lambda>() takes exactly 1 argument (0 given)

我肯定在做傻事。但是什么?在


Tags: lambda函数功能字典定义密钥translation标识
1条回答
网友
1楼 · 发布于 2024-09-30 04:39:50

不幸的是,用于定义default dict中缺少的键的factory函数没有参数-也就是说,与看起来明显不同的是,它没有传递实际缺少的键。在

因此,您无法知道所尝试的密钥是使用此方法的。在

另一种方法是自己子类dict(而不是使用DefaultDict),并添加一个__missing__方法:每当试图检索不存在的密钥时,都会调用该方法,然后您可以自由地返回接收到的密钥:

In [86]: class MyDict(dict):
    ...:     __missing__ = lambda self, key: key
    ...:     

In [87]: m = MyDict()

In [88]: m["apples"]
Out[88]: 'apples'

相关问题 更多 >

    热门问题