python字典读取不报错, 用 get(),s.get(“age”,””) ,自定义类的方式,每次把字典先格式化一下,无对应值返回None ,在 Python 的collections工具模块中,有一个defaultdict实现了类似的事情。我们看它的使用方法

我们要获取name和对应age

for s in ss[“data”]:
#这么写
name = s[“name”]
age = s[“age”]
#还是这么写
name = jsonpath(s,”$..name”)[0]
age = jsonpath(s,”$..age”)[0]

# 这么写给
name = glom(s,’name’)

age = glom(s,’age’)

都会报错:
我们只能用 get()
name = s.get(“name”,””)
age = s.get(“age”,””)
每次这么写感觉会很麻烦,后来发现可以自定义类的方式,每次把字典先格式化一下,无对应值返回None

我们自定义一个类,继承dict,然后实现它的missing方法:

class OurDict(dict):
def missing(self, key):
return None

a = OurDict({‘a’: 1, ‘b’: 2})
print(a[‘x’])

在在后来,在 Python 的collections工具模块中,有一个defaultdict实现了类似的事情。我们看它的使用方法

from collections import defaultdict

a = defaultdict(str)
a[‘a’] = 1
a[‘b’] = 2
print(a)
print(a[‘x’])
print(a)
a = defaultdict(str)接收一个函数,让a变量成为一个defaultdict类型的对象,它可以像普通字典一样被赋值和读取。

但是当你读取一个不存在的 key 时,它会自动生成一个默认值,并把默认值和这个 key 插入到字典中。这个默认值取决于你在defaultdict传入的参数。如果传入的是str那么默认值就是空字符串,如果是int那么默认值就是0.当然你也可以传入自定义的一个函数,从而控制这个默认值。