用点表示法获取内部值

时间:2016-06-20 15:53:50

标签: python

我有一本字典:

d = {'time': {36.0: 'mo'}, 'amount': {200.0: '$'}}

每个密钥(例如' time')只有一个值(例如{36.0' mo'})

我想通过

访问36.0
result = 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。

2 个答案:

答案 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