一.回顾上节课内容:
列表: list [元素,元素]
索引: 从0开始
切片: 顾头不顾尾
增: append() insert() extend()
删:pop() remorve() clean() del
改:索引修改 切片修改
查:for循环
tuple:元祖 (元素,元素...)#如果只有一个元素,在第一个元素后面添加一个逗号
只读列表 能查 不能增删改
range():
1.只有一个参数:0-xx
2.两个参数: 从xx-xx
3.三个参数: 从xx-xx,每xx去1个
二.作业(重点)
三.今日主要内容:
1.dici字典
{} 表示: 每次保存两次数据 key:value 键值对
{"大阳哥":"赵阳","sylar":"邱彦涛","强强":"张强强"}
value: 任意的数据类型
key: 必须是可哈希(hash)的 (不可变的)
字典不能切片
# 合法
dic = {123: 456, True: 999, "id": 1, "name": 'sylar', "age": 18, "stu": ['帅哥', '美女'], (1, 2, 3): '麻花藤'}
print(dic[123])
print(dic[True])
print(dic['id'])
print(dic['stu'])
print(dic[(1, 2, 3)])
# 不合法
# dic = {[1, 2, 3]: '周杰伦'} # list是可变的. 不能作为key
# dic = {{1: 2}: "哈哈哈"} # dict是可变的. 不能作为key
dic = {{1, 2, 3}: '呵呵呵'} # set是可变的, 不能作为key
dict保存的数据不是按照我们添加进去的顺序保存的. 是按照hash表的顺序保存的. 而hash表不是连续的. 所以不能进行切片工作.
它只能通过key来获取dict中的数据
已知的可哈希(不可变)的数据类型: int, str, tuple, bool
不可哈希(可变)的数据类型: list, dict, set
2.dict 增删改查
1.增加: (1).添加的内容可以直接使用key来进行添加 (2).键值对
# 新增
# dic = {}
# dic['jay'] = "周杰伦" # {'jay': '周杰伦'}
# dic["jay"] = "王力宏" # {'jay': '王力宏'}
# # 如果key存在.执行的是修改操作. 如果key不存在. 执行的是新增
# print(dic)
# dic.setdefault("王二小") # 一个参数放的是key
# dic.setdefault("王二小", "弹溜溜") # 如果key不存在. 新增
# dic.setdefault("王二小", "上片机") # 如果存在key. 不执行任何操作
# print(dic)
2.删除: pop(), del, clean, popitime()
pop: # 返回value
语法: ret = dic.pop("jay")
print(ret)
# dic = {'朱高炽':None, "朱元璋":"和尚", "诸葛亮":'不是个和尚'}
# ret = dic.pop("朱棣") # 返回value
# print(ret)
# print(dic)
del: 缺点:没有返回 ; 如果没有 就是新增
语法: del dic["jay"]
print(dic)
# 随机删除
clear: #清空
# 清空字典中的所有内容
dic.clear()
popitem: #随机删# 随机删除.
# ret = dic.popitem() # 随机删.
# print(ret)
3.修改: 用key改,也可以进行update
update : #把dic1的内容更新到dic中,如果key重名,则修改替换,如果不存在key,则新增.
语法: dic = {"id": 123, "name": 'sylar', "age": 18}
dic1 = {"id": 456, "name": "麻花藤", "ok": "wtf"}
dic.update(dic1) # 把dic1中的内容更新到dic中. 如果key重名. 则修改替换. 如果不存在key, 则新增.
print(dic)
print(dic1)
eg... dic1 = {"name":'朱高炽','age':58, '朱祁镇':18}
dic2 = {"name":'朱由检','年轻':18, '朱棣':55, '张无忌':'赵敏'}
# update: 把dic2更新到dic1, dic1中如果存在了dic2中的key.会修改(覆盖), 如果不存在. 新增这个key:value
dic1.update(dic2)
print(dic1)
print(dic2)
4.查询: 用key查找
print(dic['name'])
# print(dic['sylar']) # 报错
print(dic.get("ok"))
print(dic.get("sylar")) # None
print(dic.get("sylar", "牛B")) # 牛B
# dic = {'朱祁镇': 18, '朱棣': 55, '朱允炆':50}
# print(dic['朱见深']) # KeyError: '朱见深' key不存在
# print(dic.get("朱祁镇")) # dic.get("朱祁镇") == dic['朱祁镇']
# # get(key, default)
# print(dic.get("朱见深", "查无此人")) # 返回none. 不存在key
5.其他相关操作:
1. key() 返回所有的key的列表
错误 lst = [1, 2, 5, 8]
print(lst[5]) # list index out of range
语法: print(dic.keys()) # dict_keys(['id', 'name', 'age', 'ok']) 不用管它是什么.当成list来用就行
for key in dic.keys():
print(key)
输出keys dic = {'朱祁镇': 18, '朱棣': 55, '朱允炆':50}
print(dic['朱见深']) # KeyError: '朱见深' key不存在
print(dic.get("朱祁镇")) # dic.get("朱祁镇") == dic['朱祁镇']
# get(key, default)
print(dic.get("朱见深", "查无此人")) # 返回none. 不存在key
2.values 返回所有的value的列表
语法: print(dic.values()) # dict_values([123, 'sylar', 18, '科比']) 一样. 也当list来用
for value in dic.values():
print(value)
输出values dic = {'朱祁镇': 18, '朱棣': 55, '朱允炆':50}
print(dic.keys()) # dict_keys(['朱允炆', '朱祁镇', '朱棣']) 把这个当成list来看就可以了
for el in dic.keys():
print(el) # 拿到了key.就可以拿value
print(dic.get(el)) # value
3.items 返回所有键值的元祖表示形式
print(dic.items()) # dict_items([('id', 123), ('name', 'sylar'), ('age', 18), ('ok', '科比')]) 这个东西也是list. 只不过list中装的是tuple
for key, value in dic.items(): # ?? 这个是解构
print(key, value)
解构:
a, b = (1, 5)
print(a)
print(b)
k,v = dic.popitem() # dic.popitem()的结果是一个元组. 元组可以直接解构成两个值
print(k)
print(v)
dic = {'朱祁镇': 18, '朱棣': 55, '朱允炆':50}
print(dic.items())
# 从dic中获取到list列表. 列表中每一项都是一个元组(key,value) 通过解构可以直接把key和value获取到
for k,v in dic.items():
print(k)
print(v)
dic[] # key error 如果括号里的不在括号里面,就会报错!
dic.get() #dic.get....print(dic.get("朱祁镇")) # dic.get("朱祁镇") == dic['朱祁镇']
三.字典的嵌套
dic1 = {
"name": "汪峰",
"age": 18,
"wife": {
"name": '章子怡',
"age": 28
},
"children": ['第一个毛孩子', '第二个毛孩子'],
"desc": '峰哥不会告我吧. 没关系. 我想上头条的'
}
print(dic1.get("wife").get("name"))
print(dic1.get("children"))
print(dic1.get("children")[1])
练习:
dic1 = {
'name':['alex',2,3,5],
'job':'teacher',
'oldboy':{'alex':['python1','python2',100]}
}
1,将name对应的列表追加一个元素’wusir’。
2,将name对应的列表中的alex首字母大写。
3,oldboy对应的字典加一个键值对’老男孩’,’linux’。
4,将oldboy对应的字典中的alex对应的列表中的python2删除。