python封装获取字典值函数,支持多维字典

  • 2023-01-03
    • 可自定义键名的分割符,默认为【.】
  • 2023-02-15
    • 不使用递归,改成遍历keys判断
  • 2023-03-14
    • 支持字典里面嵌套列表,列表里嵌套字典

前些时间写了个php获取数组的。

刚好现在python的项目也需要同样的功能,就也写了一个,算法都一样,就不多说别的了,直接上代码。

如果只是1维字典的话,用python自带的get方法就可以了,这个封装主要是为了方便多维字典、多维列表、字典里嵌套列表、列表里嵌套字典取值。

def getval(obj, key, default=None, separator='.'):
    keys = key.split(separator)
    for k in keys:
        if isinstance(obj, dict):
            obj = obj.get(k, default)
        elif isinstance(obj, (list, set, tuple)) and k.isdigit() and 0 <= int(k) < len(obj):
            obj = obj[int(k)]
        else:
            return default
    return obj

调用方法跟php版的一样

data = {
    'site': {
        'name': '虚拟笔记',
        'domain': 'www.notevm.com',
        'page': {
            'tags': {
                'python': 'https://www.notevm.com/a/special/python'
            }
        }
    }
}

name = getval(data, 'site.name')
print('获取二维字典:%s' % name)

python = getval(data, 'site.page.tags.python')
print('获取四维字典:%s' % python)

url = getval(data, 'site.url', 'https://www.notevm.com/')
print('元素不存在返回默认值:%s' % url)
python获取字典的值

自定义分割符

如果数组的某个键名中包含【.】的话,可以自定义传入键名的分割符

data = {
    'site': {
        'name': '虚拟笔记',
        'domain': 'www.notevm.com',
        'page': {
            'tags.python': 'https://www.notevm.com/a/special/python'
        }
    }
}
python = getval(dictdata=data, key='site|page|tags.python', separator='|')
print(python)

原创文章,作者:小哆啦,如若转载,请注明出处:https://www.notevm.com/a/6083.html

(0)
小哆啦的头像小哆啦
上一篇 2022年6月7日 10:30
下一篇 2022年6月8日 20:03

相关推荐

发表回复

登录后才能评论