在Python中以"foo.bar.baz"的方式访问嵌套dict中的内容

简介:

我们首先举一个多级嵌套的dict的例子,后面也会用这个例子来结合代码说明:

obj = {
  "foo": {
    "bar": {
      "baz": 5
    }
  }
}

javascript中,可以通过lodash的get方法来获取上面的object中形如"foo.bar.baz"的路径所对应的值,比如_.get(obj, "foo.bar.baz")。那么在Python中需要如何操作呢?一个简单的方法是使用functools中的reduce方法来完成:

import functools

path = "foo.bar.baz"
value = functools.reduce(dict.get, path.split('.'), obj)  # value == 5

上面代码采用的是一种非常聪明的方法,巧妙的的通过reduce函数的使用,把一般来说需要通过循环和递归才能解决的问题通过一行代码就解决了

如果在Python 3.8版本之后,我们可以通过list comprehension的walrus operator(就是:=)来做另外一个比较简洁的实现:

path = "foo.bar.baz"
result = obj
__ = [result := dict.get(result, i) for i in path.split('.')]  # result == 5

如果我们需要让上述的函数支持对于不存在的key的容错,那么可以用一个lambda函数来代替dict.get,比如lambda o, k: dict.get(o or {}, key,),这样就可以比较简单在Python直接完成类似于lodash.get的效果了。当然,进一步的增加类型判断还可以让这个函数更加的容错。

目录
相关文章
|
1月前
|
Java Python
Python if-else嵌套!
本文详细介绍了Python中的条件语句,包括`if`、`if...else`、嵌套`if`及`if-elif`语句。`if`语句在条件为真时执行特定代码块,`if...else`则在条件为假时执行备选代码块。嵌套`if`语句允许在一层`if`语句内嵌套另一层`if`语句,实现更复杂的条件判断。`if-elif`语句简化了多条件判断的流程。文章通过多个示例演示了这些语句的使用方法,并讨论了常见问题,如在嵌套`if`中使用`elif`以及`if`语句的嵌套层次等。
57 3
|
2月前
|
SQL JavaScript 前端开发
基于Python访问Hive的pytest测试代码实现
根据《用Java、Python来开发Hive应用》一文,建立了使用Python、来开发Hive应用的方法,产生的代码如下
70 6
基于Python访问Hive的pytest测试代码实现
|
1月前
|
Java 程序员 C++
【Python】链式、嵌套调用、递归、函数栈帧、参数默认值和关键字参数
【Python】链式、嵌套调用、递归、函数栈帧、参数默认值和关键字参数
25 0
【Python】链式、嵌套调用、递归、函数栈帧、参数默认值和关键字参数
|
2月前
|
Python
python 如何将QueryDict转化为dict | 18
python 如何将QueryDict转化为dict | 18
|
2月前
|
NoSQL JavaScript Java
Java Python访问MongoDB
Java Python访问MongoDB
23 4
WK
|
2月前
|
存储 安全 索引
如何在Python中访问字典中的值
在Python中,访问字典(Dictionary)中的值非常简单。字典是一种无序的集合,它存储了键值对(key-value pairs),其中每个键都是唯一的,并映射到一个值上。要访问字典中的值,你需要使用键作为索引。
WK
50 0
|
3月前
|
存储 缓存 C语言
|
3月前
|
机器学习/深度学习 开发工具 Python
【Azure 应用服务】使用Python Azure SDK 来获取 App Service的访问限制信息(Access Restrictions)
【Azure 应用服务】使用Python Azure SDK 来获取 App Service的访问限制信息(Access Restrictions)
|
3月前
|
Python Windows
【Azure 应用服务】App Service For Windows 环境中部署Python站点后,如何继续访问静态资源文件呢(Serving Static Files)?
【Azure 应用服务】App Service For Windows 环境中部署Python站点后,如何继续访问静态资源文件呢(Serving Static Files)?
|
3月前
|
存储 安全 API
【Azure Developer】Python代码通过AAD认证访问微软Azure密钥保管库(Azure Key Vault)中机密信息(Secret)
【Azure Developer】Python代码通过AAD认证访问微软Azure密钥保管库(Azure Key Vault)中机密信息(Secret)
下一篇
无影云桌面