首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模糊匹配切分键

模糊匹配切分键
EN

Code Review用户
提问于 2014-09-19 10:13:19
回答 1查看 2.7K关注 0票数 3

你觉得这个主意怎么样?它应该是一个可以合理猜测您试图为getter和删除器访问的键的数据。策划人应该不动。

类似于bash中的选项卡完成,如果您输入的某些命令只有一个合理的完成,那么按下选项卡将为您填写。

逻辑应该是这样的,如果query_key不在dict中,但是只有一个dict_key满足表达式query_key in dict_key,那么我们可以假设这是关键。此外,对于字符串键,它应该不区分大小写.

代码语言:javascript
复制
class FriendlyDict(dict):

    def _guess_key_or_die(self, q):
        possibilities = []
        for key in self:
            try:
                if q in key or q.lower() in key.lower():
                    possibilities.append(key)
            except (TypeError, AttributeError):
                pass
        if len(possibilities) == 1:
            return possibilities[0]
        err = KeyError(q)
        err.data = possibilities
        raise err

    def __getitem__(self, key):
        try:
            return super(FriendlyDict, self).__getitem__(key)
        except KeyError:
            guess = self._guess_key_or_die(key)
            return super(FriendlyDict, self).__getitem__(guess)

    def __delitem__(self, key):
        try:
            return super(FriendlyDict, self).__delitem__(key)
        except KeyError:
            guess = self._guess_key_or_die(key)
            return super(FriendlyDict, self).__delitem__(guess)

    def __contains__(self, key):
        if super(FriendlyDict, self).__contains__(key):
            return True
        try:
            self._guess_key_or_die(key)
        except KeyError:
            return False
        else:
            return True
  1. 是否还有真正应该重写的__dunder__方法?
  2. 有什么问题,我可能错过了,这可能会使班级的行为怪异/不可预测的方式?
  3. 还有什么其他好的特性可以被添加,与此的一般思想是一致的?
  4. 它是作为一个子类更好,还是可以使它与其他类型的映射(例如OrderedDict )一起使用?
EN

回答 1

Code Review用户

发布于 2014-09-19 13:04:40

我建议实施以下几种其他方法:

  • get
  • setdefault
  • has_key (如果支持2.x);以及
  • __repr__/__str__.

在可哈斯集合(tuplefrozenset)上有一个边缘案例:

代码语言:javascript
复制
>>> d = FriendlyDict()
>>> d[(1, 2)] = "foo"
>>> d[1]
'foo'
>>> d[frozenset(("bar", "baz"))] = 3
>>> d["bar"]
3

同样,等式比较可能是一个问题--如果所有(大多数)都是相同的,那么两个FriendlyDicts应该被认为是平等的吗?他们的钥匙“足够近”并且有相同的值?

在附加特性方面,考虑数字键是否应该与某些容忍字典匹配--没有很好地处理浮点数的字典可能是使用这个类的原因之一。此外,字符串键中缺少的字母可能是要接收的东西(例如,d["parameer"])。

票数 4
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/63344

复制
相关文章

相似问题

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