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 in stus: if i == 'name': print(stus[i]) # 输出value print((i, '========>', stus.get(i)))
- 同时打印key和value:
使用.items()方法:
for k,v in stus.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')) import jsonpath # result = jsonpath.jsonpath(d,'$.stu_info[0].name') result = jsonpath.jsonpath(d,'$..name') print('模糊查询结果:',result) 结果: 一般查询方式的结果: 小黑 模糊查询结果: ['小黑', '小黑']
字典排序:
data = {"xiaohei":10,"xiaozhang":8,"xiaohong":6} d= sorted(data.items(),key=lambda l:l[1],reverse=True) ''' 1、data.items()获取到dict的key、value 2、使用lambda匿名函数,第一个l是变量名,l[1]是取{"xiaohei":10}中的第二个元素10 3、reverse关键字是升序还是降序 4、sorted会根据指定的进行排序 ''' print(d) >>>>> [('xiaohei', 10), ('xiaozhang', 8), ('xiaohong', 6)]
* 方法都是接( );只有取值时用的是[ ]
任何付出都是值得的,会越来越好
本文来自博客园,作者:他还在坚持嘛,转载请注明原文链接:他还在坚持嘛 https://www.cnblogs.com/brf-test/p/12358739.html