如何使用点“”。访问字典的成员? [英] How to use a dot "." to access members of dictionary?

查看:150
本文介绍了如何使用点“”。访问字典的成员?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



例如,而不是写入 mydict ['val' ] ,我想写 mydict.val



d喜欢以这种方式访问​​嵌套的dicts。例如, mydict.mydict2.val 将引用 mydict = {'mydict2':{'val':...}}



谢谢Boda Cydo。

解决方案

你可以使用我刚刚制作的这个类来做。使用这个类,您可以像另一个字典(包括json序列化)或点符号使用 Map 对象。我希望能帮助你:

  class Map(dict):

示例:
m = Map({'first_name':'Eduardo'},last_name ='Pool',age = 24,sports = ['Soccer'])

def __init __(self, * args,** kwargs):
super(Map,self).__ init __(* args,** kwargs)
在args中的arg:
if isinstance(arg,dict):
for k,v in arg.iteritems():
self [k] = v

如果kwargs:
for k,v in kwargs.iteritems():
self [k] = v

def __getattr __(self,attr):
return self.get(attr)

def __setattr __(self, key,value)
self .__ setitem __(key,value)

def __setitem __(self,key,value):
super(Map,self).__ setitem __(key,价值)
self .__ dict __。update({key:value})

def __delattr __(self,item):
self .__ delitem __(item)

def __delitem __(self,key):
super(Map,self).__ delitem __(key)
del self .__ dict __ [key]

使用示例:

  m = ({'first_name':'Eduardo'},last_name ='Pool',age = 24,sports = ['Soccer'])
#添加新的键
m.new_key ='Hello world!
#或
m ['new_key'] ='Hello world!'
打印m.new_key
打印m ['new_key']
#更新值
m.new_key ='Yay!'
#或
m ['new_key'] ='Yay!'
#删除键
del m.new_key
#或
del m ['new_key']


How do I make Python dictionary members accessible via a dot "."?

For example, instead of writing mydict['val'], I'd like to write mydict.val.

Also I'd like to access nested dicts this way. For example, mydict.mydict2.val would refer to mydict = { 'mydict2': { 'val': ... } }.

Thanks, Boda Cydo.

解决方案

You can do it using this class I just made. With this class you can use the Map object like another dictionary(including json serialization) or with the dot notation. I hope to help you:

class Map(dict):
    """
    Example:
    m = Map({'first_name': 'Eduardo'}, last_name='Pool', age=24, sports=['Soccer'])
    """
    def __init__(self, *args, **kwargs):
        super(Map, self).__init__(*args, **kwargs)
        for arg in args:
            if isinstance(arg, dict):
                for k, v in arg.iteritems():
                    self[k] = v

        if kwargs:
            for k, v in kwargs.iteritems():
                self[k] = v

    def __getattr__(self, attr):
        return self.get(attr)

    def __setattr__(self, key, value):
        self.__setitem__(key, value)

    def __setitem__(self, key, value):
        super(Map, self).__setitem__(key, value)
        self.__dict__.update({key: value})

    def __delattr__(self, item):
        self.__delitem__(item)

    def __delitem__(self, key):
        super(Map, self).__delitem__(key)
        del self.__dict__[key]

Usage examples:

m = Map({'first_name': 'Eduardo'}, last_name='Pool', age=24, sports=['Soccer'])
# Add new key
m.new_key = 'Hello world!'
# Or
m['new_key'] = 'Hello world!'
print m.new_key
print m['new_key']
# Update values
m.new_key = 'Yay!'
# Or
m['new_key'] = 'Yay!'
# Delete key
del m.new_key
# Or
del m['new_key']

这篇关于如何使用点“”。访问字典的成员?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆