首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数返回在defaultdict中使用的键值。

函数返回在defaultdict中使用的键值。
EN

Stack Overflow用户
提问于 2016-12-02 12:02:30
回答 1查看 2.3K关注 0票数 7

函数collections.defaultdict返回一个默认值,如果字典中没有键,那么这个默认值可以由我自己创建的lambda函数定义。

现在,如果没有未修改的键,我希望我的defaultdict返回未修改的键值。因此,我使用lambda标识函数lambda :x。我希望defaultdict返回密钥。

代码语言:javascript
复制
>>>translation=defaultdict(lambda x:x)
>>>translation['Haus']='maison'
>>>translation['computer']='ordinateur'
>>>translation['computer']
'ordinateur'

但是,当我使用迄今缺席的键显示默认值时:

代码语言:javascript
复制
>>>translation['email']

我希望默认翻译会返回“电子邮件”。然而,python 2.7说:

代码语言:javascript
复制
TypeError: <lambda>() takes exactly 1 argument (0 given)

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

EN

回答 1

Stack Overflow用户

发布于 2016-12-02 12:07:03

不幸的是,用于定义默认dict中缺少的键的工厂函数不带任何参数--也就是说,与看起来很明显的不同,它没有传递实际丢失的键。

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

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

代码语言:javascript
复制
In [86]: class MyDict(dict):
    ...:     __missing__ = lambda self, key: key
    ...:     

In [87]: m = MyDict()

In [88]: m["apples"]
Out[88]: 'apples'
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40931783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档