有没有一种巧妙的方法可以将密钥传递给 defaultdict 的 default_factory? [英] Is there a clever way to pass the key to defaultdict's default_factory?

查看:17
本文介绍了有没有一种巧妙的方法可以将密钥传递给 defaultdict 的 default_factory?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

一个类有一个带一个参数的构造函数:

A class has a constructor which takes one parameter:

class C(object):
    def __init__(self, v):
        self.v = v
        ...

在代码中的某处,字典中的值知道它们的键很有用.
我想使用传递给新生默认值的键的 defaultdict:

Somewhere in the code, it is useful for values in a dict to know their keys.
I want to use a defaultdict with the key passed to newborn default values:

d = defaultdict(lambda : C(here_i_wish_the_key_to_be))

有什么建议吗?

推荐答案

它几乎称不上聪明 - 但子类化是你的朋友:

It hardly qualifies as clever - but subclassing is your friend:

class keydefaultdict(defaultdict):
    def __missing__(self, key):
        if self.default_factory is None:
            raise KeyError( key )
        else:
            ret = self[key] = self.default_factory(key)
            return ret

d = keydefaultdict(C)
d[x] # returns C(x)

这篇关于有没有一种巧妙的方法可以将密钥传递给 defaultdict 的 default_factory?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆