python字典模糊匹配_Python之字典

1、字典的特点:

速度快,好取值

无序存储,因此每次输出的顺序都有可能不一样

可以循环

key是不会有重复

以k-v形式存在,即:

stus={'name':'xiaojun','sex':'男','heigt':'185','age':18,'email':'abc@qq.com','addr':'火星','id':1}

2、增删改查实现:

#查:

查询所有字典内容:

print(stus)

查询所有的value值:

使用.values()方法:

print(stus.values())

查询所有的key:

使用.keys()方法:

print(stus.keys())

查询单个值:

使用key作为变量进行查询,可以查出value值:

print(stus['name'])

如果没有key,那么以上这种方式会报错,这时换成另一种查询方式:

print(stus.get('xingming'))

使用.get()方法,如果程序中有key,则返回value值;如果没有Key,则返回:None。

(Python中的key和value都是成对出现的。)

当没有key的时候,可以设置一个默认的value值:

print(stus.get('xingming','lrx'))

那么当使用.get()时就会返回这个默认value,即lrx。

.get()方法:

查找不报错

可以设置默认值

#增:

直接赋值,如果没有值,直接加入(有同样key会修改);

stus['name']='小军'

使用.setdefault()方法:

stus.setdefault('addr','北京')

.setdefault()方法:

如果原来有值,则使用setdefault()后不会覆盖原值。

适用于不清楚原来有哪些key-value,又想赋值或者查询的情况:

stus['name']='小军'stus['name']='海龙'stus.setdefault('name','杨帆')print(stus['name'])#结果为海龙

#改:

如果有值,就覆盖原值:

stus['name']='admin'

#删:

删除具体值:

使用.pop()方法,以key为变量:

stus.pop('name')

删除具体值:

使用del方式,以key为变量:

del stus['name']

随机删除某一个值:

使用.popitem()方法:

stus.popitem()

3、清空字典:

使用.clear()方法:

stus.clear()

4、字典合并\更新:

使用.update()方法,相当于追加,把一个字典里的内容加到另一个字典里:

abc={'住址':'北京'}

stus.update(abc)

5、字典循环:

使用for循环,

(字典都是一维的)

只打印key:

for i instus:if i == 'name':print(stus[i])#输出value

print((i, '========>', stus.get(i)))

同时打印key和value:

使用.items()方法:

for k,v instus.items():print(k,'=========>',v)

6、多层嵌套字典应用:

all_stus={'xiaojun':

{'name': 'xiaojun','sex': '男','shengao': '185','age': 18,'email': 'abc@qq.com','addr': '火星','id': 1,'cars':['牧马人','911','野马','劳斯莱斯']

},'yangfan':

{'name': 'hailong','sex': '男','shengao': '185','age': 18,'email': 'abc@qq.com','addr': '火星','id': 3,'bags':{'qianbao':['lv','ysl'],'beibao':['coach','abc']

}

}

}

找到value所在位置后,进行列表追加:

all_stus['xiaojun']['cars'].append('五菱宏光')

(找value类似于列表,将所有的key作为下标使用。)

打印值的长度:

使用len()方法:

print(len(all_stus['xiaojun']['cars']))

改值:

all_stus['yangfan']['sex']='女'

删值:

使用.pop()方法:

all_stus['yangfan']['bags']['qianbao'].pop(0)#删除lv

使用.remove()方法:

all_stus['yangfan']['bags']['qianbao'].remove('ysl')#删除ysl

(remove()是列表list的方法,并不是字典里的方法。)

使用del()方式:

del all_stus['yangfan']['bags']['qianbao'][0]#del在字典中括号里是key,在列表中括号里是下标

扩展:

多层嵌套取值时,可以使用jsonpath模块,支持模糊查询:

d={"error_code": 0,"stu_info": [

{"id": 30,"name": "小黑","sex": "男","age": 20,"addr": "北北yiu北京jj北京昌gu北京昌平","grade": "处女座","phone": "18801530191","gold": 2147483647},

{"id": 66,"name": "小黑","sex": "男","age": 28,"addr": "河南省济源市北海大道32号","grade": "天蝎座","phone": "18612532941","gold": 2147483647}]

}print('一般查询方式的结果:',d.get('stu_info')[0].get('name'))importjsonpath#result = jsonpath.jsonpath(d,'$.stu_info[0].name')

result = jsonpath.jsonpath(d,'$..name')print('模糊查询结果:',result)

结果:

一般查询方式的结果: 小黑

模糊查询结果: ['小黑', '小黑']

*  方法都是接( );只有取值时用的是[ ]

任何付出都是值得的,会越来越好