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)
结果:
一般查询方式的结果: 小黑
模糊查询结果: ['小黑', '小黑']
* 方法都是接( );只有取值时用的是[ ]
任何付出都是值得的,会越来越好