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

目录
相关文章
|
2月前
|
大数据 Python
Python中for循环的嵌套应用
Python中for循环的嵌套应用
32 1
|
2月前
|
大数据 Python
Python中while循环的嵌套应用详解
Python中while循环的嵌套应用详解
28 0
|
8天前
|
Python
Python中解包到嵌套变量
【6月更文挑战第19天】
5 2
|
8天前
|
存储 Python
Python中list, tuple, dict,set的区别和使用场景
Python中list, tuple, dict,set的区别和使用场景
|
15天前
|
存储 Python
Python中的模块对象__dict__
【6月更文挑战第13天】
15 4
|
15天前
|
存储 缓存 安全
Python教程:深入理解 Python 字典(Dict)
Python 中的字典(Dictionary)是一种非常重要的数据结构,它提供了灵活的键值对存储方式,适用于各种实际编程场景。本文将带领您探索 Python 字典的全貌,从基础概念到高级应用,让您全面了解并熟练运用 Python 字典。
15 3
|
15天前
|
存储 索引 Python
Python教程:深入了解 Python 中 Dict、List、Tuple、Set 的高级用法
Python 中的 Dict(字典)、List(列表)、Tuple(元组)和 Set(集合)是常用的数据结构,它们各自有着不同的特性和用途。在本文中,我们将深入了解这些数据结构的高级用法,并提供详细的说明和代码示例。
16 2
|
28天前
|
Python
Python中访问不存在的属性
【6月更文挑战第4天】
17 5
|
1月前
|
Python
Python尝试访问不存在的属性或方法
【6月更文挑战第2天】
15 3
|
2月前
|
算法 Python
Python函数的嵌套调用:深入理解与应用
Python函数的嵌套调用:深入理解与应用
38 1