python字典读取不报错

一说起字典中获取数据,我去这多简单

小案例上来:

#方法一
from jsonpath import jsonpath
ss = {"a":1,"b":2}
result = jsonpath(ss,"$..a")[0]
print(result)
#方法二
​
from glom import glom
result = glom(ss,'a')
print(result)
#方法三
result = ss.get("a")
#方法四
result = ss['a']
​多简单,再来一个案例,我们遇到的实际情况,可不是这么简单:
ss = {
    "data":[
        {"name":"a1","age":18},
        {"name":"a2","age":15},
        {"name":"a3"},
    ]
}
#我们要获取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.当然你也可以传入自定义的一个函数,从而控制这个默认值。

 

over

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值