亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
12下一頁(yè)
最近訪問(wèn)板塊 發(fā)新帖
查看: 7643 | 回復(fù): 13
打印 上一主題 下一主題

如何像訪問(wèn)屬性一樣訪問(wèn)字典元素?? [復(fù)制鏈接]

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2010-08-17 11:33 |只看該作者 |倒序?yàn)g覽
有沒(méi)有現(xiàn)成的庫(kù)可以完成這樣的操作:
有一個(gè)字典,這樣訪問(wèn)其中的元素student['age'], 有現(xiàn)有的庫(kù)可以自動(dòng)的把這個(gè)字典生成一個(gè)東西,然后可以這樣訪問(wèn):student.age
謝謝。

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2010-08-17 12:09 |只看該作者
  1. def test(d):
  2.         class tmp:
  3.                 pass
  4.         newd=tmp()
  5.         for i in d:
  6.                 exec('newd.%s = d[i]' % i)
  7.         return newd

復(fù)制代碼
這樣應(yīng)該能湊合。。。。。。
不知道有沒(méi)有庫(kù)。。。

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2010-08-17 13:26 |只看該作者
本帖最后由 luffy.deng 于 2010-08-17 13:40 編輯

回復(fù) 1# tianshizhiluan
這種任務(wù)你只要把語(yǔ)言本身搞清楚就可以完成。沒(méi)什么必要庫(kù)啊庫(kù)的。比如定制一個(gè)字典

  1. class mydict(dict):
  2.     def __getattr__(self,i):
  3.         if i in self:
  4.             return self[i]
  5. a=mydict()
  6. a['a']=1
  7. print a.a
  8. print a.b
復(fù)制代碼
對(duì)于一個(gè)已有的字典  也有很多辦法  比如:
  1. d={'a':1,'b':2}
  2. class A(object):
  3.     pass
  4. a=A()
  5. for k,v in d.items():
  6.     setattr(a,k,v)   
  7. print a.a,a.b
復(fù)制代碼

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2010-08-17 14:08 |只看該作者
回復(fù) 1# tianshizhiluan
http://72891.cn/viewthr ... ;page=1#pid11670158
太強(qiáng)了。

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2010-08-18 14:43 |只看該作者
  1. class mydict(dict):
  2.     __getattr__=dict.__getitem__
  3.     def __setattr__(self, key, val):
  4.         dict.__setitem__(self, key, val)
  5.     def __delattr__(self, key):
  6.         dict.__delitem__(self, key)
復(fù)制代碼

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
6 [報(bào)告]
發(fā)表于 2010-08-20 17:58 |只看該作者
看這個(gè),支持遞歸的調(diào)用,例如:
foo = {
    'a': 1,
    'b': 2,
    'c': {
        'a': 22,
        },
    }

x = common.DictObj()
x.foo = foo
x['age'] = 100
print x.foo.c.a # output 22                                                                                                                                                            
print x.age #output 100
  1. import types


  2. __all__ = ["DictObj"]


  3. class DictObj(types.DictType):
  4.     def __init__(self):
  5.         types.DictType.__init__(self)

  6.         
  7.     def __getitem__(self, key):
  8.         return self.__dict__[key]
  9.         
  10.     def __repr__(self):
  11.         return str(self.__dict__)

  12.    
  13.     def __setattr__(self, key, value):
  14.         x = {}
  15.         y = DictObj()

  16.         
  17.         if hasattr(value, "__dict__"):
  18.             x = vars(value)
  19.         elif isinstance(value, types.DictType):
  20.             x = value

  21.         else:
  22.             x = value


  23.         if isinstance(x, types.DictType):
  24.             for k in x.keys():
  25.                 setattr(y, k, x[k])
  26.         else:
  27.             y = x

  28.         print key, y
  29.         self.__dict__[key] = y

  30.    
  31.     def __setitem__(self, key, value):
  32.         if hasattr(value, "__dict__"):
  33.             v = DictObj(value)
  34.         else:
  35.             v = value
  36.             
  37.         setattr(self, key, v)
復(fù)制代碼

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2010-08-20 19:27 |只看該作者
回復(fù) 6# tianshizhiluan
對(duì)于一個(gè)已存在的字典辦法很多,甚至都不需要實(shí)例動(dòng)態(tài)添加屬性的能力。
  1. d={'a':1,'b':2}
  2. k=type('klass',(object,),d)
  3. print k.a,k.b
復(fù)制代碼

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
8 [報(bào)告]
發(fā)表于 2010-08-21 21:20 |只看該作者
回復(fù) 7# luffy.deng


    哥們說(shuō)的是遞歸!回帖前請(qǐng)看貼

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2010-08-22 10:49 |只看該作者
本帖最后由 luffy.deng 于 2010-08-22 11:00 編輯
回復(fù)  luffy.deng

    哥們說(shuō)的是遞歸。』靥罢(qǐng)看貼
tianshizhiluan 發(fā)表于 2010-08-21 21:20

還挺有脾氣 , 帖我看的很清!遞歸怎么了!



  1. foo = {'a': 1,
  2.        'b': 2,
  3.        'c': {'a': 22
  4.            }
  5.        }
  6. class Obj(object):
  7.     def __getattribute__(self,name):
  8.         if isinstance(object.__getattribute__(self, name),dict):
  9.             setattr(self,name,type(name,(type(self),),
  10.                                    object.__getattribute__(self, name))())
  11.         return object.__getattribute__(self, name)

  12. Foo= type('Foo',(Obj,),foo)()
  13. print Foo.c.a
復(fù)制代碼

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2010-08-22 12:13 |只看該作者
~~~~~~~~~~~~~
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專(zhuān)區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP