本节大纲
字典的定义与特性
字典的常用操作
字典的遍历
字典的定义与特性
# 如果列表中的数据是元组类型存储的,会导致列表中的数据无法修改,因为元组内的数据不能修改
# 如果将列表中的元组类型的数据改成列表存储的,如果列表序列改变会导致后续代码数据也改变,导致后续代码需要维护修改
# 因此需要使用字典存储,字典:无序的,它是键值对的形式存储的
'''
字典特性:
1- 键值对形式
2- 无序的
3- 键是唯一的
定义:
键:一定是 不可以改变的类型
可以是:字符串、int、float、元组
不可以:列表、字典,如果是列表会报错:TypeError: unhashable type: 'list'或'dict',原因:列表和字典都可以改变,所以不能做键
值:
1- 值可以是任意类型
2- 值可以修改
为什么使用字典?
因为序列(列表)类型在一些数据发生变化,下标会变化,后续代码需要维护,所以急需一种不是序列类型,没有下标概念的类型:字典
'''
dict = {'name':'tom', 'age':21}
字典的常用操作
dict = {'name':'tom', 'age':21,'data':{'id':'001','data':'20200120'}}
# 1- 查询
# print(dict['data']['id']) # 通过键查值
# 2- 修改值 前提:键要存在
dict['name'] = 'jack'
print(dict)
# 3- 增加元素,默认添加到尾部 前提:键不存在
dict['weight'] = 100
print(dict)
# 4- 删除元素 一起删除键值对,字典没有remove删除的方法
del dict['name'] # del删除方法
dict.pop('age') # pop删除方法
print(dict)
# 5- 查看元素个数
print(len(dict))
# 6- 更新
dict.update({'name':'tom','Gender':'女'})
print(dict)
# 7- in 判断键在不在字典里面
if 'name' in dict:
print('在里面')
# 8- 清空 当前地址不变,但数据没有了
dict.clear()
# 9- 赋值(空字典) 重新给键赋值,原来指向的地址断开,重新指向一个新地址
dict = {}
# 10- 获取所有的键
print(dict.keys()) # 打印的所有键的数据是 类列表 ,类列表:不支持下标,但可以for遍历
# 将字典里的键强制转化成列表,是一个新地址对象
print(list(dict.keys()))
# for遍历字典的键
for key in dict.keys():
print(key)
# 11- 获取所有的值 同键的用法一直
print(dict.values()) # 打印的所有值的数据是 类列表,类列表:不支持下标,但可以for遍历
# 将字典里的值强制转化成列表,是一个新地址对象
print(list(dict.values()))
# for遍历字典的值
for value in dict.values():
print(value)
# 12- 获取所有的键值对
print(dict.items())
for one in dict.items():
print(one) # one代表元组
for a,b in dict.items():
print(a,b) # a,b 分别代表 键,值
# 13- 对字典本身做遍历
for one in dict:
print(one) # one代表键
字典的遍历-案例
'''
请再实现一个程序,实现如下需求点
1.下面的log变量记录了云服务器上 当天上传的文件信息
其中第一列是文件名,第二列是文件大小
请编写一个程序,统计出不同类型的 文件的大小总和
比如:
jpeg 9988999
json 324324
png 2423233
----------------------------------
'''
log = '''
f20180111014341/i_51a7hC3W.jpeg 169472 FrITJxleSP7wUD-MWw-phL_KP6Eu 15156063244230469 image/jpeg 0
f20180111014341/j_R0Hpl4EG.json 1036 ForGzwzV3e-uR3_UzvppJs1VgfQG 15156064773253144 application/json 0
f20180111020739/i_0TDKs0rD.jpeg 169472 FrITJxleSP7wUD-MWw-phL_KP6Eu 15156076847077556 image/jpeg 0
f20180111020739/j_JFO6xiir.json 1040 FmUhTchdLOd7LBoE8OXzPLDKcW60 15156077904192983 application/json 0
f20180111090619/i_1BwNksbL.jpg 49634 FtXBGmipcDha-67WQgGQR5shEBu2 15156329458714950 image/jpeg 0
f20180111090619/i_3BKlsRaZ.jpg 30152 FoWfMSuqz4TEQl5FT-FY5wqu5NGf 15156330575626044 image/jpeg 0
f20180111090619/i_5XboXSKh.jpg 40238 Fl84WaBWThHovIBsQaNFoIaPZcWh 15156329453409855 image/jpeg 0
f20180111090619/i_6DiYSBKp.jpg 74017 FrYG3icChRmFGnWQK6rYxa88KuQI 15156329461803290 image/jpeg 0
f20180111090619/i_76zaF2IM.jpg 38437 Fui8g5OrJh0GQqZzT9wtepfq99lJ 15156334738356648 image/jpeg 0
f20180111090619/i_B6TFYjks.jpg 37953 FleWqlK2W1ZmEgAatAEcm1gpR0kC 15156329464034474 image/jpeg 0
f20180111090619/i_N9eITqj3.jpg 38437 Fui8g5OrJh0GQqZzT9wtepfq99lJ 15156330419595764 image/jpeg 0
f20180111090619/i_QTSNWmA6.jpg 37953 FleWqlK2W1ZmEgAatAEcm1gpR0kC 15156333104224056 image/jpeg 0
f20180111090619/i_XdHcAfh1.jpg 56479 FjLQIQ3GxSEHDfu6tRcMylK1MZ05 15156334227270309 image/jpeg 0
f20180111090619/i_Xyy723MU.jpg 50076 FsfZpQzqu084RUw5NPYW9-Yfam_R 15156334229987458 image/jpeg 0
f20180111090619/i_d8Go0EOv.jpg 30152 FoWfMSuqz4TEQl5FT-FY5wqu5NGf 15156334736228515 image/jpeg 0
f20180111090619/i_diuHmX53.jpg 40591 FuTx1pw4idbKnV5MSvNGxCA5L470 15156333878320713 image/jpeg 0
f20180111090619/i_qQKzheSH.jpg 55858 Fj0A3i8V7fzzOiPQFL79ao15hkN9 15156329456666591 image/jpeg 0
f20180111090619/i_rHL5SYk8.jpg 40238 Fl84WaBWThHovIBsQaNFoIaPZcWh 15156336509742181 image/jpeg 0
f20180111090619/i_xZmQxUbz.jpg 40238 Fl84WaBWThHovIBsQaNFoIaPZcWh 15156333240603466 image/jpeg 0
f20180111090619/i_zBDNgXDv.jpeg 73616 FlgNwq8lypgsxrWs_ksrS_x47SQV 15156334232887875 image/jpeg 0
f20180111090619/j_4mxbEiVh.json 2990 Fpq-3yl3Yr1CadNrJVSDnpeRhQtT 15156331445226898 application/json 0
f20180111090619/j_i1K74768.json 3042 Fl5PpDw1TsZXMuhoq1RUrOeGZ6br 15156335067090003 application/json 0
f20180111095839/i_Q7KMKeda.png 518522 Fl-yB1_ruL2uxZN9k7DjB62h9dYH 15156359599713253 image/png 0
f20180111095839/j_5DpqHolV.json 184 FoYvi7cmSrzuVjUgCRzW5kU95SVo 15156359719719064 application/json 0
f20180111100442/i_No8kToIV.jpg 48975 Fu1cw3f--5Vpz9kLGeJfvljhCtyZ 15156364349642377 image/jpeg 0
f20180111100442/i_P1bkvSeg.jpg 68200 FvYe8vi46TjUKhEy_UwDqLhO6ZsW 15156363800690634 image/jpeg 0
f20180111100442/i_T1AulKcD.jpg 52641 Fj2YzvdC1n_1sF93ZZgrhF3OzOeY 15156364021186365 image/jpeg 0
f20180111100442/i_X8d8BN07.jpg 50770 FivwidMiHbogw77lqgkIKrgmF3eA 15156363969737156 image/jpeg 0
f20180111100442/i_g0wtOsCX.jpg 76656 Fmtixx0mP9CAUTNosjLuYQHL6k0P 15156363448222155 image/jpeg 0
f20180111100442/i_h5OT9324.jpg 72672 FvbIqPLTh2cQHTIBv2akUfahZa_Z 15156364401354652 image/jpeg 0
f20180111100442/i_he8iLYI6.jpg 49399 FjeJvwjwhU-hKZsq66UoBg9_tEJs 15156363907932480 image/jpeg 0
f20180111100442/i_kg29t7Pp.jpg 76293 FuYj__sSeEN7AsXMbxO24Z8Suh8d 15156364156384686 image/jpeg 0
f20180111100442/i_oz1YoBI1.jpg 75620 FkY3xsUMwOI01zgoH1iXXgiQeq6I 15156364089112904 image/jpeg 0
f20180111100442/i_xrOT98on.jpg 50021 Fql7ookM1Rc6V7VairKAfnKe-o9w 15156363856357316 image/jpeg 0
f20180111135114/i_Zqt8Tmoe.png 161629 FlELw59_mV3VqDBLyu1BKN4fIWnx 15156500155209863 image/png 0
f20180111135114/j_uhHoMXKq.json 159 FrypljwAr2LgoLAePBNTUYTUAgDt 15156500200488238 application/json 0
f20180111142119/i_s83iZ2GR.png 92278 Fns8tdh3JCkRmfE_COYEu4o8w03E 15156517082371259 image/png 0
f20180111142119/j_0g45JRth.json 159 Fq1rFwdRguYRXrp61nGZ5TsUG1V- 15156517143375596 application/json 0
f20180111144306/i_yE5TC84E.png 139230 Fjf61ymabEnEvnr5ZMHFjXGCrYlP 15156530038824150 image/png 0
f20180111144306/j_OF4WVtSH.json 159 FqwkKcxfo8jd0jFUyuH4X2CrnE9q 15156530083419530 application/json 0
f20180111150230/i_KtnER4g3.png 120044 FuwOWdrqzcr2-UScem-LzEMgMezs 15156541734892258 image/png 0
f20180111150230/j_xMSUEejY.json 158 FjJr_4deMqFphGaptm-2Pa6wwRP2 15156541771989216 application/json 0
f20180111151741/i_JuSWztB3.jpg 92506 FrIjRevHSi6xv4-NQa2wrHu5a1zQ 15156550875370965 image/jpeg 0
f20180111153550/i_9wWzVenl.gif 769872 FvslKY9JUaCQm-lu02E34tvAP_oG 15156561674621628 image/gif 0
'''
resDict = {}
# 获取到每一行的文件类型与大小
# 获取每一行内容
lines = log.split('\n')
# 删除头尾的空字符串
del lines[0],lines[-1]
# 对列表每一个元素进行操作--for遍历
for line in lines:
temp = line.split('\t')
# 文件类型
fileType = temp[0].split('.')[-1].strip()
# 文件大小
fileSize = int(temp[1].strip())
# print(fileType,fileSize)
# 统计累加
resList = {'类型1':'大小1','类型2':'大小2'}
# 1- 该行类型不在字典里,新增一个键值对
if fileType not in resDict:
resDict[fileType] = fileSize
# 2- 该行类型在字典里,累加
else:
resDict[fileType] += fileSize
print(resDict)
扩展-字典的使用
# 扩展-字典的使用
vipData = '''{
"aac003": "tom",
"tel": "13574556577",
"crm003": "1",
"crm004": "1"
}'''
"""
接口自动化
1- json格式:本身就是字符串,以键值的形式表达
2- 字典:数据类型,存储使用
"""
"""vipData修改tom值"""
# 1- json 转换成 字典
import json
print('转换前-->',type(vipData),vipData)
res = json.loads(vipData) # 转换成字典
res['aac003'] = 'jack' # 修改tom为jack
print('转换后-->',type(res),res)
# 2- 字典 转换成 json
print(json.dumps(res),type(json.dumps(res)))
网友评论