Bor*_*lis 1 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))
Run Code Online (Sandbox Code Playgroud)
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'
Run Code Online (Sandbox Code Playgroud)