现在我正在使用python.关于dict的一个问题....假设我有一个字典
config = {'account_receivable': '4', 'account_payable': '5', 'account_cogs': '8', 'accoun
t_retained_earning': '9', 'account_income': '6', 'account_expense': '31', 'durat
ion': 2, 'financial_year_month': 9, 'financial_year_day': 15, 'account_cash': '3
', 'account_inventory': '2', 'account_accumulated_depriciation': '34', 'account_
depriciation_expense': '35', 'account_salary_expense': '30', 'account_payroll_pa
yable': '68', 'account_discount': '36', 'financial_year_close': '2008-08-08'}
Run Code Online (Sandbox Code Playgroud)
如果print - > config ['account_receivable']它将返回其对应的值4
但我希望通过这种方式访问它 - > config.account_receivable,然后它将返回相应的值
我怎么能实现这个??? 如果有人可以请帮助我
BR //纳兹穆尔
Ale*_*lli 12
为此,多年前,我发明了简单的Bunch成语; 一种简单的实现方式Bunch是:
class Bunch(object):
def __init__(self, adict):
self.__dict__.update(adict)
Run Code Online (Sandbox Code Playgroud)
如果config是一个字典,你不能使用config.account_receivable-这是绝对不可能的,因为字典不具有该属性,期.但是,你可以包装config成Bunch:
cb = Bunch(config)
Run Code Online (Sandbox Code Playgroud)
然后获取cb.config_account你内心的内容!
编辑:如果你想要的属性分配上Bunch也影响到原来的dict(config在这种情况下),使得例如cb.foo = 23会做config['foo'] = 23,你需要一个性能稍微不同的实现Bunch:
class RwBunch(object):
def __init__(self, adict):
self.__dict__ = adict
Run Code Online (Sandbox Code Playgroud)
通常情况下,平原Bunch是首选,正是因为在实例化之后,Bunch实例和dict它被"准备"完全解耦 - 对它们中的任何一个的更改都不会影响另一个; 最常见的是这种脱钩是你想要的.
当你做想要的"耦合"效应,然后RwBunch是让他们的方式:有了它,每个属性设置或实例上的缺失会本质上设置或从删除的项目dict,并且,反之亦然,从设置或删除项目dict的意愿本质上设置或删除实例中的属性.
您可以使用collections.namedtuple执行此操作:
from collections import namedtuple
config_object = namedtuple('ConfigClass', config.keys())(*config.values())
print config_object.account_receivable
Run Code Online (Sandbox Code Playgroud)
您可以在此处了解有关namedtuple的更多信息:
http://docs.python.org/dev/library/collections.html