带默认键的Python字典

2024-10-01 09:15:38 发布

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

我运行的是python2.7.10。在

我想有一个字典返回存储在特定键的值,以防丢失项。例如,类似的事情:

myD = dict(...)
return myD[key] if key in myD else myD[defaultKey]

为了确保它是明确的,我想调用myD[key]并返回正确的值,而不在代码中添加额外的if...else。。。在

这并不完全是defaultdict所做的(因为它需要一个函数作为默认调用),也不完全是dict.setdefault()所做的,而且{}似乎也没有帮助。我可能应该从dictdefaultdict和重载__init__()missing()方法继承,但我无法想出一个好的方法来做到这一点。在


Tags: 方法key函数代码inreturnif字典
2条回答

在您的例子中,dict.get应该可以工作(我知道您已经提到它不起作用)。你试过:

myD.get(key,myD[defaultKey])

我不太清楚你想要什么(没读过你问题下的评论),但我认为这至少接近你想要的。在

class DefaultKeyDict(dict):
    def __init__(self, default_key, *args, **kwargs):
        self.default_key = default_key
        super(DefaultKeyDict, self).__init__(*args, **kwargs)

    def __missing__ (self, key):
        if self.default_key not in self:  # default key not defined
            raise KeyError(key)
        return self[self.default_key]

    def __repr__(self):
        return ('{}({!r}, {})'.format(self.__class__.__name__,
                                      self.default_key,
                                      super(DefaultKeyDict, self).__repr__()))

    def __reduce__(self):  # optional, for pickle support
        args = (self.default_key if self.default_key in self else None,)
        return self.__class__, args, None, None, self.iteritems()

dkdict = DefaultKeyDict('b', {'a': 1, 'b': 2, 'c': 3})

print dkdict['a']  # -> 1
print dkdict['b']  # -> 2
print dkdict['c']  # -> 3
print dkdict['d']  # -> 2 (value of the default key)

del dkdict['b']  # delete the default key
try:
    print dkdict['d']  # should now raise exception like normal
except KeyError:
    print("dkdict['d'] raised a KeyError")

您可能需要修改类__init__()方法,以接受默认键及其值作为参数(而不仅仅是键)。在

相关问题 更多 >