三、Python的数据类型
3.2 Python的组合数据类型
3.2.4 字典-映射类型
映射类型是键-值数据项的组合,每一个元素都是一个键-值对,即元素是(key,value),元素之间是无序的,键-值对(key,value)是一种二元关系,源于属性和值的映射关系。
字典是Python中的一种映射类型,用于存储键值对,每个键必须是唯一的,而值可以是任意数据类型,包括整数、浮点数、字符串、列表、甚至是另一个字典。字典是无序的,即字典中的键值对没有固定的顺序。
字典的特点
无序性:字典是无序的,即其元素的排列顺序并不按照添加的顺序进行。
键值对存储:字典的元素是以键值对的形式存储的,其中键(key)是唯一的,并且是不可变的数据类型(如字符串、数字、元组等),而值(value)可以是任意类型的数据。
可变性:字典是可变的,即可以在字典中添加、修改或删除键值对。
高效查找:由于字典使用哈希表实现,因此查找、添加、删除等操作都具有平均情况下接近O(1)的时间复杂度。
无索引:与列表和元组不同,字典不支持通过索引访问元素,而是通过键来访问对应的值。
字典的操作
1. 创建字典
使用花括号 {} 创建:例如 {'name': 'Alice', 'age': 25}
使用 dict() 函数创建:例如 dict(name='Alice', age=25)
从列表的元组对创建:例如 dict([('name', 'Alice'), ('age', 25)])
2. 访问字典中的值
使用方括号 [] 和键来访问值,例如 my_dict['name']
如果访问不存在的键,会触发 KeyError 异常。可以使用 get() 方法来避免异常,并返回指定的默认值。
3. 修改字典
直接对键进行赋值即可修改该键对应的值,例如 my_dict['age'] = 30
4. 添加键值对
如果键不存在于字典中,直接赋值即可添加新的键值对,例如 my_dict['city'] = 'New York'
5. 删除键值对
使用 pop() 方法删除指定键的键值对,并返回该键对应的值,例如 my_dict.pop('name')
使用 del 语句删除指定键的键值对,例如 del my_dict['age']
使用 clear() 方法清空字典中的所有键值对,例如 my_dict.clear()
6. 遍历字典
使用 for 循环遍历字典的键,例如 for key in my_dict:
使用 for 循环遍历字典的键值对,例如 for key, value in my_dict.items():
7. 字典的常用方法
len():返回字典中键值对的数量。
str():将字典转换为字符串格式。
type():返回字典的数据类型。
keys():返回字典中所有的键。
values():返回字典中所有的值。
items():返回字典中所有的键值对。
get():返回指定键的值,如果键不存在则返回默认值。
setdefault():如果键在字典中不存在,则设置该键的值;如果键已存在,则不会改变其值。
update():使用另一个字典的键值对更新当前字典。
这些特点和操作使得字典在Python中成为处理关联数据的强大工具。
3.3 运算符
运算符是告诉程序指定运算操作的符号,是对操作数进行运算,通过运算符可以将两个不同的数据组合起来得到一个运算结果。
Python中的运算符按照不同的功能,分为算术运算符、比较运算符和逻辑运算符。
Python 提供了多种运算符,用于执行各种算术运算、比较、逻辑判断、位运算等。以下是对这些运算符的介绍和示例:
1. 算术运算符
-(取反):result = -5
+(加法):result = 2 + 3
-(减法):result = 5 - 3
*(乘法):result = 2 * 3
/(除法):result = 6 / 2
//(整除):result = 7 // 3 # 结果为 2
%(取模):result = 7 % 3 # 结果为 1
**(幂运算):result = 2 ** 3 # 结果为 8
2. 比较运算符
==(等于):result = (2 == 3) # 结果为 False
!=(不等于):result = (2 != 3) # 结果为 True
>(大于):result = (5 > 3) # 结果为 True
<(小于):result = (2 < 3) # 结果为 True
>=(大于或等于):result = (5 >= 5) # 结果为 True
<=(小于或等于):result = (2 <= 3) # 结果为 True
3. 逻辑运算符
and(逻辑与):result = (True and False) # 结果为 False
or(逻辑或):result = (True or False) # 结果为 True
not(逻辑非):result = not False # 结果为 True
4. 位运算符
&(按位与):result = 5 & 3 # 5(二进制101)和3(二进制011)的按位与结果是1(二进制001)
|(按位或):result = 5 | 3 # 结果是7(二进制111)
^(按位异或):result = 5 ^ 3 # 结果是6(二进制110)
~(按位取反):result = ~5 # 结果取决于整数的大小和系统的位数(对于32位系统,-6)
<<(左移):result = 2 << 1 # 结果是4(二进制100)
>>(右移):result = 4 >> 1 # 结果是2(二进制010)
5. 成员运算符
in:检查某个元素是否存在于某个序列中(如列表、元组或字符串):result = 'a' in 'hello' # 结果为 True
not in:检查某个元素是否不存在于某个序列中:result = 'z' not in 'hello' # 结果为 True
6. 运算符的优先级
Python 中的运算符优先级遵循数学中的常规优先级规则,如括号内的运算优先级最高,幂运算高于乘除和取模,乘除和取模高于加减,然后是比较运算符,接着是逻辑运算符等。可以使用括号来改变默认的优先级。
示例:
python
result = 2 + 3 * 4 # 结果是 14,因为乘法优先于加法
result = (2 + 3) * 4 # 结果是 20,因为括号改变了优先级
在编写复杂的数学表达式或逻辑表达式时,使用括号可以确保表达式的计算顺序符合你的预期。