在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的效果了。当然,进一步的增加类型判断还可以让这个函数更加的容错。

目录
相关文章
|
9月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
492 2
|
9月前
|
Java 数据处理 索引
(Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
DataFrame结构 每一列都属于Series类型,不同列之间数据类型可以不一样,但同一列的值类型必须一致。 DataFrame拥有一个总的 idx记录列,该列记录了每一行的索引 在DataFrame中,若列之间的元素个数不匹配,且使用Series填充时,在DataFrame里空值会显示为NaN;当列之间元素个数不匹配,并且不使用Series填充,会报错。在指定了index 属性显示情况下,会按照index的位置进行排序,默认是 [0,1,2,3,...] 从0索引开始正序排序行。
637 0
|
11月前
|
存储 数据处理 Python
python dict的所有基础知识
python dict的所有基础知识
618 0
|
12月前
|
数据采集 Web App开发 iOS开发
解决Python爬虫访问HTTPS资源时Cookie超时问题
解决Python爬虫访问HTTPS资源时Cookie超时问题
|
机器学习/深度学习 算法 关系型数据库
Python循环进阶:嵌套与控制的深度解析
本文深入探讨Python中嵌套循环的原理与应用,从数学模型到工程实践全面解析。内容涵盖嵌套循环的本质(如笛卡尔积实现、变量作用域)、精细控制技巧(如break/continue、迭代器协议、异常处理),以及性能优化策略(预计算、向量化等)。同时结合树形结构遍历、动态规划、游戏开发等典型场景,提供最佳实践建议。掌握这些技巧,助你突破编程瓶颈,实现复杂问题的优雅解决。
401 6
|
存储 应用服务中间件 开发工具
对象存储OSS-Python设置代理访问请求
通过 Python SDK 配置 nginx 代理地址请求阿里云 OSS 存储桶服务。示例代码展示了如何使用 RAM 账号进行身份验证,并通过代理下载指定对象到本地文件。
734 15
|
SQL JavaScript 前端开发
基于Python访问Hive的pytest测试代码实现
根据《用Java、Python来开发Hive应用》一文,建立了使用Python、来开发Hive应用的方法,产生的代码如下
381 6
基于Python访问Hive的pytest测试代码实现
|
Java Python
Python if-else嵌套!
本文详细介绍了Python中的条件语句,包括`if`、`if...else`、嵌套`if`及`if-elif`语句。`if`语句在条件为真时执行特定代码块,`if...else`则在条件为假时执行备选代码块。嵌套`if`语句允许在一层`if`语句内嵌套另一层`if`语句,实现更复杂的条件判断。`if-elif`语句简化了多条件判断的流程。文章通过多个示例演示了这些语句的使用方法,并讨论了常见问题,如在嵌套`if`中使用`elif`以及`if`语句的嵌套层次等。
1057 3
python 如何将QueryDict转化为dict | 18
python 如何将QueryDict转化为dict | 18
|
Java 程序员 C++
【Python】链式、嵌套调用、递归、函数栈帧、参数默认值和关键字参数
【Python】链式、嵌套调用、递归、函数栈帧、参数默认值和关键字参数
286 0
【Python】链式、嵌套调用、递归、函数栈帧、参数默认值和关键字参数

推荐镜像

更多