以点表示法获取嵌套值

时间:2015-09-04 18:09:28

标签: python

我的json中有以下结构:

obj = {
  'Name': 'David',
  'Car': {
           'Make': 'Ford',
           'Year': 2008
   }
}

我给出了点符号来引用对象值,例如:

Car.Make ==> 'Form'

给定一个字符串,例如"Car.Make",我将如何以编程方式获取属性?在上面的例子中,它将是:

obj.get('Car').get('Make')

但是对于深度嵌套的对象,如何在"Attr1.Attr2.Attr3...Attrn"的点符号中提取值?

2 个答案:

答案 0 :(得分:2)

obj = {
  'Name': 'David',
  'Car': {
           'Make': 'Ford',
           'Year': 2008
   }
}
s = "Car.Make"
x = obj
keys = s.split(".")
for key in keys:
    x = x[key]
print(x)

结果:

Ford

或者,以单行形式:

from functools import reduce
print(reduce(lambda a,b: a[b], s.split("."), obj))

答案 1 :(得分:0)

以下是Stackoverflow的一些答案,它提出了一个自定义字典类,它实现__getattr____setattr__来访问字典项: