Skip to main content
 首页 » 编程设计

python之如何制作一本字典,其中多个值访问一个值(Python)

2025年05月04日14think

我想制作一本 Python 字典。我希望像 0.25、0.30、0.35 这样的值成为这本字典中的键。问题是我有像 0.264、0.313、0.367 这样的值。我希望这个值可以访问键,例如我希望从 0.25(含)到 0.30(不含)的每个值都可以访问键 0.25 下的值。任何想法如何做到这一点?我想我以前以某种方式做过,但我现在没有想法。 提前致谢。

请您参考如下方法:

创建 dict 的子类,调整了 __getitem__、__setitem__、__delitem__、__contains__、get()、pop() 和 update() 舍入键的方法:

class RoundingDict(dict): 
    def _round(self, key): 
        return int(key * 20) / 20.0 
 
    def __contains__(self, key): 
        return super(RoundingDict, self).__contains__(self._round(key)) 
 
    def __getitem__(self, key): 
        return super(RoundingDict, self).__getitem__(self._round(key)) 
 
    def __setitem__(self, key, value): 
        super(RoundingDict, self).__setitem__(self._round(key), value) 
 
    def __delitem__(self, key): 
        super(RoundingDict, self).__delitem__(self._round(key)) 
 
    def get(self, key, default=None): 
        return super(RoundingDict, self).get(self._round(key), default) 
 
    def pop(self, key, default=None): 
        return super(RoundingDict, self).pop(self._round(key), default) 
 
    def update(self, iterable): 
        try: 
            super(RoundingDict, self).update({ 
                self._round(k): v for k, v in iterable.iteritems()}) 
        except AttributeError: 
            super(RoundingDict, self).update(( 
                (self._round(k), v) for k, v in iterable)) 

在获取、设置或删除单个键时,以及在使用多个键更新字典时,这会将任何键降低到最接近的 0.05 倍数:

>>> d = RoundingDict() 
>>> d[0.346] = 'Foo' 
>>> d[0.34] 
'Foo' 
>>> d[0.30] 
'Foo' 
>>> d[0.35] 
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
  File "<string>", line 6, in __getitem__ 
KeyError: 0.35 
>>> d.get(0.34) 
'Foo' 
>>> d.get(0.35, 'default') 
'default'