字典

内容概要
1. 什么是字典
字典是以key:value的形式来保存数据
用{}表示. 存储的是key:value
 1 # lst = ["周杰伦", "林俊杰", "蔡依林"]
 2 # lst[0]
 3 # lst[0] = "麻花藤"
 4 # 查找的效率比较高
 5 # 坑: 字典存储数据的时候是用的hash值来存储. 哈希是一个算法,不能变的(python内置的)
 6 # 数据必须是不可变的(可哈希). 字典的key必须是可哈希的(不可变).
 7 # dic = {"jay":"周杰伦", "jj": "林俊杰", "jolin":"蔡依林"}
 8 # print(dic['jay']) # 周杰伦
 9 # dic['jay'] = "麻花藤"
10 #
11 # print(type(dic)) # <class 'dict'>
12 
13 # 列表是可变的. 不可哈希
14 # 元组是不可变的. 可哈希的
15 # print(hash((1,2,3))) # unhashable type: 'list'
16 #                                                               unhashable type: 'list'
17 # dic = {"jay":"周杰伦", "王力宏":["龙的传人", "唯一", "改变自己"], ["战狼", "战狼2"]: "武警"}
18 # print(dic)
View Code

2. 字典的增删改查(重点)
1. 添加
dic[新key] = 值

setdefault(key,value) key不存在,添加键值对
2. 删除
pop(key) 删除指定键的键值对
## dic.popitem() # 随机删除一项(现在的版本一般是弹出最后一项)
##del dic["李安"]
##dic.clear() # 清空
3. 修改
dic[老key] = (新)值
update() 更新字典(迭代更新,类似于列表的 extend)
4. 查询
dic[key] ##直接使用key就可以拿到value
get(key, 值) ##当key不存在. 返回第二个参数. 默认第二个参数是None
setdefault(key, value) key存在,返回对应的 value,key 不存在,先新增,再返回对应的 value
5. 遍历,字典是一个可迭代对象
 1 # dic = {"意大利": "李云龙", "美国": "美国往事"}
 2 #
 3 
 4 #
 5 # # dic["日本"] = "东京审判"  # 新key表示添加
 6 # # dic['韩国'] = "釜山行"
 7 #
 8 # # setdefault (难点)
 9 # # 有添加的功能,如果key是存在的. 不添加
10 # # 流程: 判断你给的key是否在字典中存在了.如果已经存在了. 就不再新增. 如果不存在. 执行新增操作
11 # dic.setdefault("美国", "三傻大闹宝莱坞")
12 # print(dic)
13 
14 
15 #
16 # dic = {"张艺谋":"红高粱", "李安":"断臂山", "陈凯歌":"霸王别姬", "郭德纲":"祖宗十九代"}
17 # # dic.pop("郭德纲") # 你要记住的
18 # # dic.popitem() # 随机删除一项. 在python早期版本  字典是无序的.##现在是有序的(输出在屏幕上的显示是有序的,底层还是无序的),所以一般删除的是最后一项
19 # del dic["李安"]
20 # dic.clear() # 清空
21 # print(dic)
22 
23 
24 #
25 # dic = {"河南":"胡辣汤", "开封": "灌汤包", "武汉":"热干面"}
26 # # dic['河南'] = "烩面" # 老key = 新值
27 # print(dic)
28 
29 # dic1 = {"赵四":"刘晓光", "刘能":"王晓利", "王木生":"范伟"}
30 # dic2 = {"赵四":"宝宝", "刘能":"萌萌", "皮校长":"皮长山"}
31 ##迭代更新
32 # dic1.update(dic2) # 把dic2怼到dic1里面. 把dict2中的内容更新到dic1
33 # print(dic1)
34 # print(dic2)
35 
36 
37 #
38 dic1 = {"赵四":"刘晓光", "刘能":"王晓利", "王木生":"范伟"}
39 
40 # 1. 直接使用key就可以拿到value
41 # print(dic1["赵四四"]) # KeyError: '赵四四' key不存在
42 
43 
44 # 2. get(key)
45 # print(dic1.get("刘能能"))  # None 当key不存在返回None
46 # print(dic1.get("刘能能", "没有这个人")) # 当key不存在. 返回第二个参数. 默认第二个参数是None
47 
48 # 3. setdefault() 第一个功能是添加(当key不存在). 第二个功能是查询(根据你给的key查询)
49 # 整个执行流程: 判断给的key是否存在. 如果存在. 就不执行新增流程.直接查询出这个key对应的value
50 # 如果key不存在. 先执行新增操作. 再使用key把对应的value查询出来
51 # ##这里是与 get(key,value)的区别,当 key不存在的时候,get不执行新增操作,直接返回你给定的 value 值,而 setdefault 先执行新增,再执行查询操作
52 # ret = dic1.setdefault("皮长山", "皮校长")
53 # print(ret) # 皮校长
54 
55 # ret = dic1.setdefault("王木生", "宝宝")
56 # print(ret) # 范伟
增删改查
 1 # dic = {"赵四":"刘晓光", "刘能":"王晓利", "王木生":"范伟"}
 2 # 直接for循环
 3 # for key in dic: # 直接循环字典拿到的是key, 有key直接拿value
 4 #     print(key)
 5 #     print(dic[key])
 6 
 7 # dic = {"赵四":"刘晓光", "刘能":"王晓利", "王木生":"范伟"}
 8 
 9 # 不常用的
10 # print(dic.keys()) # dict_keys(['赵四', '刘能', '王木生']) 像列表. 山寨列表
11 # for k in dic.keys(): # 拿到的是字典中的每一个key
12 #     print(k)
13 
14 # 当需要单独获取到所有value的时候
15 # print(dic.values()) # dict_values(['刘晓光', '王晓利', '范伟'])  所有的value的一个数据集
16 # for v in dic.values():
17 #     print(v)
18 
19 # print(dic.items()) # 所有的键值对 dict_items([('赵四', '刘晓光'), ('刘能', '王晓利'), ('王木生', '范伟')])
20 # for k, v in dic.items(): # 遍历字典最简单的方案##这里涉及到一个自动解构的过程
21 #     # print(item) # ('赵四', '刘晓光')
22 #     # k, v = item # 解构,##item 是一个中间变量,可以直接省略掉
23 #     # k = item[0]
24 #     # v = item[1]
25 #     print(k, v)
26 
27 
28 # a, b = 1, 2, 3  # 把后面的两个值分别赋值给前面两个变量. 解构, 解包
29 # print(a)
30 # print(b)
31 
32 
33 ''' 老师课上讲解的总结:
34 ------------------------------------------------------------------------
35 # a,b = 1,2 #解构必须前后数量相等,不等会报错
36 # a,b = (1,2)
37 # (a,b) = (1,2)#上面的三种写法是等价的,#元组的括号可以不加,只要有逗号就是元组类型的
38 # print(a)
39 # print(b)
40 
41 #元组的括号可以不加,只要有逗号就是元组类型的
42 # a = 1
43 # print(type(a)) #<class 'int'>
44 # a = 1,
45 # print(type(a)) #<class 'tuple'>
46 # a = (1,)
47 # print(type(a))#<class 'tuple'>
48 -------------------------------------------------------------------------
49 '''
50 # c = 1,2,3
51 # print(c) # (1, 2, 3) # 元组和列表是可以解包的
52 
53 # d, e, f = [1,2,3]
54 # print(d)
55 # print(e)
56 # print(f)
57 
58 
59 # 遍历字典两套方案(最常用的,需要记忆的)
60 dic = {"赵四":"刘晓光", "刘能":"王晓利", "王木生":"范伟"}
61 # 1. 使用for循环直接遍历字典的key
62 # for key in dic:
63 #     print(key)
64 #     print(dic[key])
65 
66 # 2. 可以使用字典的items()+解构可以直接获取到key和value
67 # for k, v in dic.items():
68 #     print(k)
69 #     print(v)
遍历

 


3. 字典的相关操作
1. keys() 获取到所有的键
2. values() 获取到所有的值
3. items() 拿到所有的键值对
4. 字典的嵌套
字典的嵌套. 字典套字典
 1 wf = {
 2     "name":"汪峰",
 3     "age":52,
 4     "hobby":["唱歌", "上头条", "穿皮裤"],
 5     "wife": {
 6         "name": "章子怡",
 7         "age": 49,
 8         "hobby":["演戏", "上电视", "当导师"],
 9         "tishen": {
10             "name":"萌萌",
11             "age":28
12         },
13         "zhuli":{
14            "name":"磊磊",
15            "age": 20
16         }
17     },
18     "zhuli":{
19         "name":"宝宝",
20         "age":23,
21         "hobby":["抽烟","喝酒","烫头"]
22     },
23     "children":[{"name":"汪老大"}, {"name":"汪老二"}]
24 }
25 # wf['children'][1]["age"] = 2
26 # print(wf)
27 # # print(wf['zhuli']['name'])
28 #
29 # # 汪峰老婆替身的名字
30 # print(wf['wife']['tishen']['name'])
31 # # 汪峰老婆的第二个爱好
32 # print(wf['wife']['hobby'][1])
33 # # 汪峰助理的第三个爱好
34 # print(wf['zhuli']['hobby'][2])
35 #
36 #
37 # # 汪峰的助理+10岁
38 # wf['zhuli']['age'] = wf['zhuli']['age'] + 10
39 # # 汪峰的老婆添加一个爱好("导戏")
40 # wf['wife']['hobby'].append("导戏") # 添加完毕了
41 # # 删除汪峰助理的"抽烟"爱好
42 # wf["zhuli"]["hobby"].remove("抽烟")
43 # print(wf)
View Code

 


5. 集合(不重要). 去重复
集合中的元素是不重复的,必须是可哈希的(不可变), 相当于字典中的key(集合本身是可变的,但是它要求它内部的值是不可变的)
空集合:set()
空元组:tuple()
空列表:list()
非空集合: {123}集合, 集合其实就是不存value的字典(字典也是可变的,但是它要求他内部的 key 是不可变的)
 1 # s = {"周润发", "大润发", "王润发", "周润发"} # 不重复的
 2 # print(s)
 3 
 4 # # 唯一能用到的点. 去重复(使用强制类型转化的办法:列表-->集合(去除重复的元素)-->列表)
 5 # lst = ["麻将", "牌九", "骰子", "扑克", "老虎鸡", "骰子", "扑克", "老虎鸡", "扑克", "老虎鸡", "扑克", "老虎鸡"]
 6 #
 7 # # 把列表转化成集合  x 转化成y类型 y()
 8 # s = set(lst)
 9 # # print(s)
10 # # 把集合变回列表
11 # lst = list(s)
12 # print(lst) # 顺序是乱的(唯一的缺点,但是功(去重复)大于过.排序和去重复都是相当麻烦的一件事)
13 
14 ##增
15 # s = {"刘嘉玲", "赵本山", "莱昂纳多迪卡普里奥", "罗纳尔多"}
16 # s.add("刘嘉玲") # 记忆(如果实在是想要记忆的话)
17 # print(s)
18 #
19 # s.update({"刘嘉玲", "刘能", "赵四"}) # 迭代更新
20 # print(s)
21 
22 
23 ##删
24 # ret = s.pop() # 随机删除(弹出)一个,类似于字典的popitem()
25 # print(s)
26 # print(ret)
27 
28 # s.remove("罗纳尔多")
29 # print(s)
30 
31 # 集合还有字典. 是没有索引和切片的
32 
33 ##改
34 ##set集合中的数据没有索引,也没有办法去定位一个元素,所以没有办法进行直接修改.我们可以采用先删除后添加的方式来完成修改的操作
35 # s = {"刘嘉玲", "赵本山", "莱昂纳多迪卡普里奥", "罗纳尔多"}
36 # 把罗纳尔多修改成梅西
37 # s.remove("罗纳尔多")#先删除
38 # s.add("梅西")#后修改
39 # print(s)
40 
41 
42 ##查询
43 # 迭代
44 # for el in s:
45 #     print(el)
46 
47 ##下面是一些不常使用的操作
48 # s1 = {"门神", "灯神", "灯神你在笑什么?"}
49 # s2 = {"门神", "灯神", "你俩在干什么?"}
50 
51 # 交集
52 # print(s1 & s2)
53 # print(s1.intersection(s2))
54 
55 # 并集
56 # print(s1 | s2)
57 # print(s1.union(s2))
58 
59 # # 差集
60 # print(s1 - s2) # s1中特有的内容
61 # print(s1.difference(s2))
62 #
63 # # 反交集
64 # print(s1 ^ s2) # 两个集合中特有的内容
65 # print(s1.symmetric_difference(s2))
66 
67 # 集合本身是可变的数据类型 . 不可哈希
68 # 集合套集合->不能互相嵌套的
69 # 集合中的元素必须可哈希(不可变的)
70 # s = {123}
71 
72 # 如果非要集合套集合
73 # s = frozenset({"哈哈","呵呵"}) # 不可变的数据类型(集合)
74 # for el in s:
75 #     print(el)
View Code
  1 # # ##增加
  2 # # dic = {'意大利':'李云龙','美国':'美国往事'}
  3 # # dic['日本'] = '东京审判' #新 key 表示添加
  4 # # dic['日本'] = '东京' #旧key 表示修改
  5 # # dic['韩国'] = '釜山行'
  6 # #
  7 # # #setdefault    key 存在就什么都不做,不存在就添加进去
  8 # # dic.setdefault('印度','三傻大闹宝莱坞')#注意这里的键值对是以逗号间隔
  9 # #
 10 # # print(dic)
 11 #
 12 #
 13 #
 14 # ##删除
 15 # dic = {'张艺谋':'红高粱','李安':'断臂山','陈凯歌':'霸王别姬','郭德纲':'祖宗十九代'}
 16 # dic.pop('郭德纲')#需要记忆的
 17 # dic.popitem()#随机删除的一项(现在基本是删除末尾的一项) 在 Python 早期版本,字典是无顺序的(界面的展示上是无序的),现在的界面展示是有序的,基本就是你的输入顺序
 18 # del dic['李安']
 19 # dic.clear()
 20 #
 21 #
 22 #
 23 # print(dic)
 24 #
 25 #
 26 # ##修改
 27 # #老 key = 新值
 28 # # update
 29 #
 30 #
 31 #
 32 # ##查询
 33 # dic1 = {'赵四':'刘小光','刘能':'王晓丽','王木生':'范围'}
 34 # #直接用下标 key,key 不存在会报错
 35 # print(dic1['赵四'])
 36 # #直接用get括号内加 key,key 不存在不会报错
 37 # print(dic1.get('刘能能'))
 38 # print(dic1.get('刘能能','没有这个人'))
 39 #
 40 # dic1.setdefault('皮厂产','皮校长')
 41 # dic1.setdefault('皮厂产','皮屁屁')
 42 #
 43 #
 44 # ##遍历
 45 # #直接 for循环遍历   直接拿到的是 key
 46 # for key in dic1: #直接循环字典拿到的是 key,有 key 直接拿 value
 47 #     print(key,dic1[key])
 48 #
 49 # #使用 dic.items() 直接拿到k,v      这里有个解构的过程
 50 # 这是遍历字典最简单的方法
 51 # for k,v in dic.items():
 52 #     print(k,v)
 53 #
 54 #
 55 
 56 
 57 
 58 # a,b = 1,2 #解构必须前后数量相等,不等会报错
 59 # a,b = (1,2)
 60 # (a,b) = (1,2)#上面的三种写法是等价的,#元组的括号可以不加,只要有逗号就是元组类型的
 61 # print(a)
 62 # print(b)
 63 
 64 #元组的括号可以不加,只要有逗号就是元组类型的
 65 # a = 1
 66 # print(type(a)) #<class 'int'>
 67 # a = 1,
 68 # print(type(a)) #<class 'tuple'>
 69 # a = (1,)
 70 # print(type(a))#<class 'tuple'>
 71 
 72 # ##字典的嵌套
 73 # wf = {
 74 #     "name":"汪峰",
 75 #     "age":52,
 76 #     "hobby":["唱歌", "上头条", "穿皮裤"],
 77 #     "wife": {
 78 #         "name": "章子怡",
 79 #         "age": 49,
 80 #         "hobby":["演戏", "上电视", "当导师"],
 81 #         "tishen": {
 82 #             "name":"萌萌",
 83 #             "age":28
 84 #         },
 85 #         "zhuli":{
 86 #            "name":"磊磊",
 87 #            "age": 20
 88 #         }
 89 #
 90 #     },
 91 #     "zhuli":{
 92 #         "name":"宝宝",
 93 #         "age":23,
 94 #         "hobby":["抽烟","喝酒","烫头"]
 95 #     }
 96 # }
 97 # #汪峰老婆替身的名字
 98 # print(wf['wife']['tishen']['name'])
 99 #
100 # #汪峰老婆的第二个爱好
101 # print(wf['wife']['hobby'][1])
102 #
103 # #汪峰助理的第三个爱好
104 # print(wf['zhuli']['hobby'][2])
105 #
106 # #汪峰的助理的+10岁
107 # wf['zhuli']['age'] += 10
108 # print(wf['zhuli']['age'])
109 #
110 # #汪峰老婆的添加一个爱好-导戏
111 # wf['wife']['hobby'].append('导戏')
112 # print(wf['wife']['hobby'])
113 #
114 # #汪峰助理的第1个爱好-抽烟  删除
115 # # del wf['zhuli']['hobby'][0]
116 # # wf['zhuli']['hobby'].pop(0)
117 # wf['zhuli']['hobby'].remove('抽烟')
118 # print(wf['zhuli']['hobby'])
119 #
120 #
121 #
122 #
123 # ##set 集合  唯一能用到的点就是去重复 x 转换成 y
124 # lst = ["麻将", "牌九", "骰子", "扑克", "老虎鸡", "骰子", "扑克", "老虎鸡", "扑克", "老虎鸡", "扑克", "老虎鸡"]
125 # s = set(lst)
126 # lst1 = list(s)
127 # print(lst1)
128 # print(lst)
主要知识点详细记录

6.今日作业及默写


内容回顾:
1. 字典
{key:value, key:value.....}
成对的保存数据

字典没有索引. 不能切片, 字典的key必须是可哈希的.不可变的
1. 增加:
dic[新key] = 值
dic.setdefault(key, value) 新增, 查询
2. 修改:
dic[老key] = 值
dic.update(d) 把d更新到dic中
3. 删除;
pop(key)
popitem() 随机删除
del dic[key]
clear() 清空
4. 查询
for k in dic:
k
dic[k]

get(key) 如果key不存在, 返回None
dic[key] 如果key不存在, 报错

setdefault(key, value)
根据key查询出value
5. 相关操作
1. keys() 所有的key
2. values() 所有的value
3. items() 所有的key和value
for k, v in dic.items(): # 自动解包
k
v
set集合
内部元素必须可哈希. 不可变
内部元素不重复

add() 添加

frozenset() 冻结集合. 不可变的. (##一般的集合本身是可变的,但是要求其内部的元素是不可变的,而这个鸡舍本身就是不可变的)

转载于:https://www.cnblogs.com/liangxiaoji/p/10056533.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值