2010-07-19 113 views
3

假设我有对象有钥匙“dlist0”与属性“ROW_ID”在我可以访问如Python字典键Vs的对象属性

getattr(dlist0,'row_id') 

则返回值 但如果我有一本字典

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

实在不行

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

任何人都可以帮助我?

+0

:)是的,我有...'__getitem__'属性可以用于他们两个 – 2010-07-19 07:11:59

回答

5

字典有项目,因此使用任何定义为__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

也许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'} 
相关问题