python 第五章
# # !/usr/bin/python
# # -*- coding: utf-8 -*-
# # @File : 总结.py
# # @time : 2019-07-1010:26
# # @Author : zhangshan33
#
# 字典 -- dict
# 字典:
# 是无序的,可变的数据类型
# 用于存储数据,存储大量数据 字典比列表快,将数据和数据之间进行关联
lst1 = ["常鑫","李文虎","张宇"] # 姓名
lst2 = [10,80,100] #分数
print(lst1[0],lst2[0])# 取lst1 的第一位和lst2 的第一位
# 输出 常鑫 10
# 定义一个字典
# 格式:
# 变量名 = {} 大括号
# 逗号分割为一个元素
# 逗号内跟键值对,冒号隔开
dic1 = {"常鑫":10,"李文虎":80,"张宇":100,True:123}
print(dic1)# 输出的格式为字典型
# 输出
# {'常鑫': 10, '李文虎': 80, '张宇': 100, True: 123}
# 俗称键值对:
# "阿":10
# 键 值
# 可哈希的值 -- 不可变的数据类型(str,bool,tuple, int)避免哈希冲突,使用开放寻址法
# 不可哈希的 -- 可变的数据类型(list,dic,set)
# 可以做字典key的类型: str,int,bool,tuple(,),None
# 可以做集合的元素的类型:是字典的key
# 不可以做的类型:list[,]、dic{:}、set{,}
# 字典的键里可放:
# 使用可哈希的值(不可变的数据类型)
# 不建议使用int,不唯一
# 唯一,重复取后值,取代前者
# 字典值:
# 可以任意
dic = {"常鑫":[1,2,3],"李文虎":80,"张宇":100,10:"大黑哥",True:123,(1,2,3):"大煎饼","常鑫":0.5}
print(dic)
# 输出 {'常鑫': 0.5, '李文虎': 80, '张宇': 100, 10: '大黑哥', True: 123, (1, 2, 3): '大煎饼'}
# 使用频率优先级:
# 字典>列表>字符串
# 增:
# dic["键"] = "值" 暴力添加
dic["123"] = "321"
print(dic)
# 输出 {'常鑫': 0.5, '李文虎': 80, '张宇': 100, 10: '大黑哥', True: 123, (1, 2, 3): '大煎饼', '123': '321'}
# dic.setdefault("键","值") 存在不添加
# 1、先进行键查询,如果没有,执行添加
dic.setdefault("234","345")
print(dic)
# 输出 {'常鑫': 0.5, '李文虎': 80, '张宇': 100, 10: '大黑哥', True: 123, (1, 2, 3): '大煎饼', '123': '321', '234': '345'}
# 2、如果存在,不添加
dic.setdefault("123","456")
print(dic) # 不添加
# 输出 {'常鑫': 0.5, '李文虎': 80, '张宇': 100, 10: '大黑哥', True: 123, (1, 2, 3): '大煎饼', '123': '321', '234': '345'}
# 删除:
# del dic["键"] 通过键删除键值对
del dic["123"]
print(dic)
# 输出 {'常鑫': 0.5, '李文虎': 80, '张宇': 100, 10: '大黑哥', True: 123, (1, 2, 3): '大煎饼', '234': '345'}
# dic.pop("键") 通过键删除键值对 返回值:返回被删除的值
dic.pop("234")
print(dic)
# 输出{'常鑫': 0.5, '李文虎': 80, '张宇': 100, 10: '大黑哥', True: 123, (1, 2, 3): '大煎饼'}
# dic.clear() 清空
dic1 = {"123":"321","aaa":123}
dic1.clear()
print(dic1)
# 输出 {}
# 改:
# dic["键"] = "值" 字典中没有某个键值对的时候就是添加,当键在字典中存在的时候,就是修改(有则改,无则加)
dic["常鑫"] = 1
print(dic)
# 输出 {'常鑫': 1, '李文虎': 80, '张宇': 100, 10: '大黑哥', True: 123, (1, 2, 3): '大煎饼'}
# dic.update({"1":3,"2":4})("要更新的字典")
dic2 = {"123":"321","aaa":123}
dic2.update({"345":"ii"})# 直接更新
print(dic2)
# 输出 {'123': '321', 'aaa': 123, '345': 'ii'}
dic2.update({"123":"456"})
print(dic2)
# 输出 {'123': '456', 'aaa': 123, '345': 'ii'}
# update 括号中的级别高于update前面的字典,后面的覆盖前面的
# 查:
# 不能索引
# for 循环 支持for循环,获取的是字典中的每个键
for i in dic:
print(i)
# 输出
# 常鑫
# 李文虎
# 张宇
# 10
# True
# (1, 2, 3)
# dic.get("键") 通过键获取值,如果不存在字典中,返回none
print(dic.get("常鑫"))
# 输出 1
print(dic.get("l"))
# 输出 None
# dic["键"] 通过键获取值,如果不存在字典中,提示报错
#print(dic["l"])
# 报错
print(dic["李文虎"])
# 输出 80
# 其他操作:
dic3 = {"123":"abc","234":"efg"}
# print(i,dic3.get(i)) 获取所有键和值
for i in dic3:
print(i,dic3.get(i))
# 输出
# 123 abc
# 234 efg
# 获取所有的键 存在一个高仿列表中
# print(dic3.keys())
print(dic3.keys())
# 输出 dict_keys(['123', '234'])
# 获取所有的值 存在一个高仿列表中
# print(dic3,values())
print(dic3.values())
# 输出 dict_values(['abc', 'efg'])
# 获取所有的键和值 存在一个高仿列表里的元组
# print(dic3.items())
print(dic3.items())
# 输出 dict_items([('123', 'abc'), ('234', 'efg')])
# 解构
a,b = 10,12
a,b = b,a
print(a,b)
# 输出 12 10
a,b = [1,2]# 列表可以
print(a,b)
# 输出 1 2
a,b = (3,4)# 元组
print(a,b)
# 输出 3 4
a = 10,12# 本质是一个元组
print(a)
# 输出(10,12)
a,b = "23"
print(a,b)
# 输出 2 3
a,b = {"123":"a","234":"b"}
print(a,b)
# 输出 123 234
a,_,b = (5,6,7)# 赋值若不想用,可用_替换,要一一对应
print(a,b)
# 输出 5 7
# for 循环输出全部键和值 ,输出元组
for i in dic3.items():
print(i)
# 输出
# ('123', 'abc')
# ('234', 'efg')
# for 循环输出全部键和值,输出元素
for i in dic3.items():
print(i[0],i[1])
# 输出
# 123 abc
# 234 efg
# for 输出元素
# for 循环输出全部键
for i in dic3.keys():
print(i)
# 输出
# 123
# 234
# for 循环输出全部值
for i in dic3.values():
print(i)
# 输出
# abc
# efg
# for与解构共用 k,v
# 获取每个元素的键和值
for k,v in dic3.items():
print(k,v)
# 输出
# 123 abc
# 234 efg
# 字典的嵌套
# 字典直接输键,列表用索引
# 查找的时候一层一层的通过键进行查找
dic = {1001:["周杰伦","林俊杰"],
1002:{"汪峰":{"前妻1":["大烧饼"],"前妻2":["熊大","熊二"],"国际章":"肉丝"}},
1003:{"陈冠希":["阿娇","阿萨","张柏芝"]},
1004:{"韦小宝":[{"教主夫人":["教主"]},
{"阿珂":"刺客"},
{"双儿":"天地会"},
{"爱心觉罗建宁":"公主"},
{"独臂神尼":{"韦小宝师父":{"兰陵王":"隐身"},"花木兰":[
"唧唧复唧唧","木兰是战士",{"爸爸":["花和尚"]}]
}},
{"陈圆圆":"丈母娘"},{"穆建平":"小郡主"}]},
1005:{"常鑫":["大黑哥","大烧饼","吃大煎饼","肉夹馍","自行车","井盖",]}
}
# print(dic)
# print(dic[1004]["韦小宝"][0]["教主夫人"][0])
# print(dic[1005]["常鑫"][-1])
# print(dic[1002]["汪峰"]["前妻2"][-1])
# print(dic[1004]["韦小宝"][4]["独臂神尼"]["韦小宝师父"]["兰陵王"])
# print(dic[1004]["韦小宝"][4]["独臂神尼"]["花木兰"][2]["爸爸"][0])
今日总结
# # !/usr/bin/python
# # -*- coding: utf-8 -*-
# # @File : 总结.py
# # @time : 2019-07-1010:26
# # @Author : zhangshan33
#
# 字典 -- dict
#
# 字典:
# 是无序的,可变的数据类型
# 用于存储数据,存储大量数据 字典比列表快
#
# 格式:
# 变量名 = {} 大括号
# 逗号分割为一个元素
#
#
#
# 可哈希的值 -- 不可变的数据类型(str,bool,list)避免哈希冲突,使用开放寻值法
# 不可哈希的 -- 可变的数据类型(int tuple)
# 俗称键值对:
# "阿":10
# 字典的键里可放:
# 必须是可哈希的值
# 唯一,重复取后值,取代前者
#
#
#
# 字典值可以任意
#
# 使用频率优先级:
# 字典>列表>字符串
#
# 增:
# dic["键"] = "值" 暴力添加
# dic.setdefault("键","值") 存在不添加
# 1、先进行键查询,如果没有,执行添加,如果存在,不添加
#
# 删除:
# del dic["键"] 通过键删除键值对
# dic.pop("键") 通过键删除键值对 返回值:返回被删除的值
# dic.clear() 清空
#
# 改:
# dic["键"] = "值" 字典中没有某个键值对的时候就是添加,当键在字典中存在的时候,就是修改(有则改,无则加)
# dic.update({"1":3,"2":4})({"要更新的字典"})
# update 括号中的级别高于update前面的字典,后面的覆盖前面的
#
# 查:
# for i in dic: 循环 获取的是字典中的每个键,支持for循环
# 不能索引
# dic.get("键") 通过键获取值,如果不存在字典中,返回none
# dic["键"] 通过键获取值,如果不存在字典中,提示报错
# dic.setdefault("键")通过键获取值
#
# 其他操作:
# print(dic1,keys()) 获取所有的键 存在一个高仿列表中
# print(dic1,values()) 获取所有的值 存在一个高仿列表中
# print(dic1.items()) 获取所有的键和值 存在一个高仿列表里的元组(元组第一个元素键,第二个值)
# print(i,dic1.get(i)) 获取所有键和值
# for i in dic:
# print(i,dic[i]) 获取所有的键和值
#
#
#
# 解构:
# a = 10
# b = 20
# a,b = b,a
#
# 赋值不想用,可用_替换,要一一对应
#
# for循环:
# for循环打印每个键和值的元组
# for循环打印每个键和值的元素
# for循环打印键的元素
# for循环打印值的元素
# for与解构共用,获取每个键和值k,v
#
#
# 字典的嵌套
# 字典直接输键,列表用索引
# 查找的时候一层一层的通过键进行查找
#
# "拼接符号".join("可迭代对象")