python dictionary key Vs对象属性

时间:2010-07-19 07:01:00

标签: python dictionary object

假设我有对象有关键'dlist0',属性'row_id'我可以访问

getattr(dlist0,'row_id')
然后它返回值 但如果我有一本字典

ddict0 = {'row_id':4, 'name':'account_balance'}
getattr(ddict0,'row_id')

它不起作用

我的问题是如何以同样的方式访问ddict0和dlist0

任何人都可以帮助我?

2 个答案:

答案 0 :(得分:6)

字典包含项目,因此使用定义为__getitem__()的任何内容来检索密钥的值。

对象具有属性,因此使用__getattr__()来检索属性的值。

理论上,如果你需要,理论上可以覆盖一个指向另一个 - 但你为什么需要?为什么不写一个辅助函数:

Python 2.x:

def get_value(some_thing, some_key):
    if type(some_thing) in ('dict','tuple','list'):
        return some_thing[some_key]
    else:
        return getattr(some_thing, some_key)

Python 3.x:

def get_value(some_thing, some_key):
    if type(some_thing) in (dict,tuple,list):
        return some_thing[some_key]
    else:
        return getattr(some_thing, some_key)

答案 1 :(得分:1)

或许namedtuple更适合您的目的

>>> from collections import namedtuple
>>> AccountBalance=namedtuple('account_balance','row_id name')
>>> ddict0=AccountBalance(**{'row_id':4, 'name':'account_balance'})
>>> getattr(ddict0,'row_id')
4

>>> ddict0._asdict()
{'row_id': 4, 'name': 'account_balance'}