python学习笔记:第5天 基本数据类型之字典
程序员文章站
2022-04-15 11:13:01
[TOC] 字典的介绍 字典(dict)是python中唯一的一个映射的数据类型,它是以一对一对的键值对的形式组成的一个容器,在python中字典也是可变的,我们也可以在字典中存放各种类型的数据。 + 哈希算法 :在存放一个字典时是先根据key计算出一个内存地址,然后将key:value保存在这个内 ......
目录
字典的介绍
字典(dict)是python中唯一的一个映射的数据类型,它是以一对一对的键值对的形式组成的一个容器,在python中字典也是可变的,我们也可以在字典中存放各种类型的数据。
哈希算法:在存放一个字典时是先根据key计算出一个内存地址,然后将key:value保存在这个内存地址中,这种算法被称为哈希(hash)算法。
-
字典中的key必须是可hash的,也就是字典的值必须具有唯一性.
- 可hash:可hash的意思可以理解为具有唯一性的,一种数据集如果它具有可hash的特性,那这个数据集中的数据肯定具有唯一性
- 可hash数据: int、str、tuple、bool
- 不可hash数据:list、dict、set
1. 字典的创建
in [1]: d1 = {'a':1, 'b':2} in [2]: d2 = {1: 'a', 2: 'b'} in [3]: d3 = {(1,): 'a', 2:'b'} # 使用数字、字符串、和元组作为键值时不会报错 in [4]: d3 out[4]: {(1,): 'a', 2: 'b'} in [5]: d4 = {[1,2]: 'a', 3:'b'} # 但是使用可变数据列表作为键值时会报unhashable type的错误 --------------------------------------------------------------------------- typeerror traceback (most recent call last) <ipython-input-5-35ca200a29d3> in <module> ----> 1 d4 = {[1,2]: 'a', 3:'b'} typeerror: unhashable type: 'list' in [6]:
2. 增加元素
in [6]: d1['c'] = 3 in [7]: d1['d'] = (5, 6) # 增加一个元素,只需要使用dic[key] = value的方式赋值即可 in [8]: d1 out[8]: {'a': 1, 'b': 2, 'c': 3, 'd': (5, 6)} in [9]: d1.setdefault('e', {'name': 'jerry'}) # 也可以使用setdefault增加元素,具体使用方法下面再介绍 out[9]: {'name': 'jerry'} in [10]: d1 out[10]: {'a': 1, 'b': 2, 'c': 3, 'd': (5, 6), 'e': {'name': 'jerry'}} in [11]:
3. 删除元素
- pop([index])
- popitem()
- clear()
- del dic[index]
in [12]: d1.pop('a') # pop用于删除指定的对应key的值 out[12]: 1 in [13]: d1.popitem() # 随机删除 out[13]: ('e', {'name': 'jerry'}) in [14]: del d1['b'] # 使用del删除对变量的引用 in [15]: d1 out[15]: {'c': 3, 'd': (5, 6)} in [16]: d1.clear() # 清空字典 in [17]: d1 out[17]: {} in [18]:
4. 修改元素
in [18]: d2 out[18]: {1: 'a', 2: 'b'} in [19]: d2[2] = 'bbbb' # 使用dic[key] = value修改 in [20]: d2 out[20]: {1: 'a', 2: 'bbbb'} in [21]: d3 out[21]: {(1,): 'a', 2: 'b'} in [22]: d2.update(d3) # 使用update更新d2中的元素 in [23]: d2 out[23]: {1: 'a', 2: 'b', (1,): 'a'} in [24]:
5. 查找元素
in [28]: d2 out[28]: {1: 'a', 2: 'b', (1,): 'a'} in [29]: print(d2[(1,)]) a in [30]: print(d2[2]) b in [31]: d2.get((1,)) out[31]: 'a' in [32]: d2.get(1) out[32]: 'a' in [33]:
6. 遍历字典
字典也是一种可迭代的数据类型,也可以像列表和元组一样通过for循环遍历,字典遍历时这样的:
in [34]: for ele in d2: ...: print(ele) 1 2 (1,) in [35]:
从上面的例子可以看出,直接遍历字典得到的是字典的key,其实使用字典的keys()方法也可以得到字典的kes:
in [35]: for ele in d2.keys(): ...: print(ele) 1 2 (1,) in [36]:
要获取字典的value要使用values方法可以获得:
in [36]: for ele in d2.values(): ...: print(ele) a b a in [37]:
要同时获取key和value事可以使用item()方法或者遍历key值访问value:
in [40]: for k, v in d2.items(): # 使用items可以遍历出字典的键值对 ...: print('{0} => {1}'.format(k, v)) 1 => a 2 => b (1,) => a in [41]: for k in d2.keys(): # 通过字典的key获取其值 ...: print('{0} => {1}'.format(k, d2[k])) 1 => a 2 => b (1,) => a in [42]:
补充
1. setdefault方法:
setdefault方法接收2个参数,第一个是字典的key,第二个是key对应的value值(可以不写,默认为none),如果指定的key在字典中则返回其所对应的值,如果指定的key不在字典中则增加一个以key为键第二个参数(默认为none)为值的元素到字典中。
in [42]: d3 out[42]: {(1,): 'a', 2: 'b'} in [43]: d4 = {'a':1, 'b':2, 'c':3, 'd':4} in [44]: d4.setdefault('b', 20) out[44]: 2 in [45]: d4.setdefault('e') in [46]: d4 --------------------------------------------------------------------------- nameerror traceback (most recent call last) <ipython-input-46-6a0e787d4f48> in <module> ----> 1 d4 nameerror: name 'd4' is not defined in [47]: d4 out[47]: {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': none} in [48]: d4.setdefault('f', 30) out[48]: 30 in [49]: d4 out[49]: {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': none, 'f': 30} in [50]:
2. 封包(解构)解包
in [50]: a, b = 1, 2 # 可以在一行给多个参数赋值,其实等号的右边是一个元组 in [51]: print(a, b) 1 2 in [52]: a, b = (1, 2) # 跟上面的效果和实现是一样的,分别给a和b赋值 in [53]: print(a, b) 1 2 in [54]: a, b, _, d = [1, 2, 3, 4] # 也可以解包列表也(不需要的参数可以使用'_'接收) in [55]: print(a, b, d) 1 2 4 in [56]: for ele in d4.items(): ...: print(ele) ('a', 1) ('b', 2) ('c', 3) ('d', 4) ('e', none) ('f', 30)
通过上面的例子我们可以看到,使用解包的方法可以把容器里的数据解封装并赋值给其他元素,这样使用解包的特性遍历字典的keys和values就方便多了:
in [60]: for k, v in d4.items(): ...: print(k, v) a 1 b 2 c 3 d 4 e none f 30 in [61]:
推荐阅读
-
python学习笔记:第21天 常用内置模块之collections和time
-
python学习笔记:第5天 基本数据类型之字典
-
Python学习笔记—基本数据类型
-
Python学习笔记一:基本数据类型
-
Python基本数据类型之字符串、列表、元组、字典讲解
-
《Python零基础快乐学习之旅》学习笔记3——Python的基本数据类型
-
python零基础学习笔记(五)-python数据类型之字符串类型内置函数
-
Python学习笔记(二)【基本数据类型:number类型、字符串类型、bool类型、list列表、tuple元组、dict字典、set集合】
-
python学习笔记:第21天 常用内置模块之collections和time
-
Python基本数据类型之字符串、列表、元组、字典讲解