我有一本字典:
d = {'time': {36.0: 'mo'}, 'amount': {200.0: '$'}}
每个密钥(例如' time')只有一个值(例如{36.0' mo'})
我想通过
访问36.0result = d.time
和200.0做
result = d.amount
我该怎么做?到目前为止,我有:
class Bunch(object):
def __init__(self, adict):
self.__dict__.update(adict)
x = Bunch(d)
print x.time
哪个产生{36.0:' mo'}而不是36.0。
答案 0 :(得分:1)
在snippet下面劫持了属性access,并返回dict的第一个键而不是dict本身。它为除__dict__
之外的所有属性执行此操作,因此请相应使用并注意这意味着什么。
from __future__ import print_function
d = {'time': {36.0: 'mo'}, 'amount': {200.0: '$'}}
class Bunch(object):
def __init__(self, adict):
self.__dict__.update(adict)
def __getattribute__(self, attr):
if attr == '__dict__':
return super(Bunch, self).__getattribute__(attr)
return next(iter(self.__dict__[attr]))
x = Bunch(d)
print(x.time)
print(x.amount)
测试
➜ ~ python3 keys.py
36.0
200.0
➜ ~ python2 keys.py
36.0
200.0
答案 1 :(得分:1)
在确保数据键与dict
方法之间没有名称冲突之后,我会继承__getattr__
并覆盖dict
。
d = {'time': {36.0: 'mo'}, 'amount': {200.0: '$'}}
class Bunch(dict):
def __getattr__(self, attr):
try:
val = self[attr]
return next(iter(val))
except KeyError:
raise AttributeError(attr)
x = Bunch(d)
x.time # 36.0