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

标签 python dictionary key multiple-value

我想制作一本 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'

关于python - 如何制作一本字典,其中多个值访问一个值(Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21312425/

相关文章:

python - 使用 for/while 循环编写 filter() 函数

python - 连接同一字典中两个键的值

python - 只用键制作字典?

android - 无法获取 flutter 应用程序的 SHA-1 key

python - 当值是列表且项目不唯一时,交换字典键和值

Python递归查询

python - 转义 linux 路径和文件名中的空格

python - Python suds 中带前导下划线的参数

dictionary - 在不知道键的情况下快速引用字典键和值

java - 如何使用流将 Collectors.groupingby 收集器创建的列表元素映射到其他类型?