文章目录
学习目标
- 能够定义和查找元组
- 能够说出字典的特点
- 能够对字典进行增删改查
- 能够说出集合的特点
- 能够对集合进行增删改查
- 能够使用通用方法操作字符串、列表、元组、字典、集合
一、元组的使用
- 元组和列表很像,都是用来保存多个数据。
- 和列表一样,也是一个 有序的存储数据的容器
- 元组和列表的区别在于,列表是可变的,而元组是不可变的
# 使用一对小括号 () 来表示一个元组
nums = (9,4,3,1,7,6)
# 可以通过下标来获取元素
nums[1] # 4,但是不能修改
# tuple包含的方法:index、count 参考列表中的使用方式
- 特殊情况:表示仅有一个元素的元组时,使用 (ele,) 的形式(与()优先级括号要区分开)
二、字典的基本使用
# 使用大括号{}来表示一个字典,不仅有值 value,还有值的描述 key
# 字典里的数据都是以键值对 key-value 的形式保留的
# key 和 value之间使用冒号:来连接;多个键值对之间使用逗号,来分割
person = {'name':'zhangsan','age':18}
2.1 字典使用注意事项
- 在字典中的 key 不允许重复,如果 key 重复了,后一个 key 对应的值会覆盖前一个
- 字典里的 value 可以是任意的数据类型,但是 key 只能使用不可变数据类型,一般使用字符串
2.2 字典的增删改查
- 查找数据(字典的数据在保存时,是无序的,不能通过下标来获取)
person = {"name":"zhangsan","age":18}
print(person['name']) # 使用key获取到对应的value
print(person['height']) # 如果要查找的key不存在,会直接报错
# 需要:获取一个不存在的key时,不报错,如果这个key不存在,使用默认值
# 使用字典的get方法
person.get('height') # None
# 如果根据key获取不到value,使用给定的默认值
person.get('gender','female') # female
- 增加\修改数据
person = {'name':'zhangsan','age':18}
# 直接使用 key 可以修改对应的value
person['name'] = 'lisi'
# 如果 key 存在,是修改key对应的value;
# 如果 key 在字典里不存在,会往字典里添加一个新的键值对
person['gender'] = 'female' # person = {'name':'zhangsan','age':18,'gender':'female'}
- 删除数据
# 把name对应的键值对删除了,执行结果是被删除的value
x = person.pop('name')
print(x) # lisi
# popitem 删除一个元素,结果是被删除的这个元素组成的键值对
result = person.popitem()
print(result) # ('gender','female')
# clear 清空一个字典
person.clear()
2.3 update方法的使用
# 列表可以使用extend方法将两个列表合并成为一个列表
nums1 = [1,2,3,4,5]
nums2 = [6,7,8,9]
nums1.extend(nums2)
print(nums1) # [1,2,3,4,5,6,7,8,9]
# 字典的update
person1 = {'name':'zhangsan','age':18}
person2 = {'addr':'襄阳','height':180}
person1.update(person2)
print(person1) # {'name':'zhangsan','age':18,'addr':'襄阳','height':180}
2.4 合并多个dict
# 对于多个列表、字符串、元组类型的数据,可以使用 + 合成一个新的同类型的数据
# list1 + list2 --> list3
# str1 + str2 --> str3
# tuple1 + tuple2 --> tuple3
# 对于合并多个字典dict类型数据
{**dict1,**dict2} --> dict3
2.5 字典的遍历
# 特殊在列表和元组是一个单一的数据,但是字典是键值对的形式
person = {'name':'zhangsan','age':18,'height':'180cm'}
# 第一种的遍历方式: 直接for...in循环字典
for x in person: # for ... in 循环获取的是key
print(x,'=',person[x])
# 第二种方式:获取到所有的key,然后在遍历key,根据key获取value
for k in person.keys():
print(k,'=',person[k])
# 第三种方式:获取所有的value
# 只能拿到值,不能拿到key
for v in person.value():
print(v)
# 第四种方式:
for k,v in person.items(): # 把列表里的元素是元组,把元组当做整体进行遍历
print(k,'=',v)
2.6 字典的推导式
person = {'a':100,'b':200,'c':300}
person_new = {v:k for k,v in person.items()} # dict{100:'a',200:'b',300:'c'}
三、集合的使用
3.1 set的使用
- 集合(set)是一个 无序的不重复元素 序列,可以使用 大括号 {} 或者 set() 函数创建集合
注意:创建一个空冰集合必须用 set() 而不是 {},因为 {} 是用来创建一个空字典
创建格式:
param = {value01,value02,...}
# or
set(value)
3.2 set的操作
语法格式如下:
# 如果有重复的数据,会自动去除
names = {'zhangsan','lisi','jack','tony','jack'}
names.add('阿珂') # 添加一个元素
names.pop() # 随机删除一个
names.clear() # 清空集合
names.remove('jack') # 删除指定的元素
# 将多个集合合并生成一个新的集合
names.union({'刘能','赵四'})
# A.update(B)
# 将 B 拼接到 A 里
names.update({'刘能','赵四'})
3.3 集合的高级用法
first = {f1,f2,...}
second = {s1,s2,...}
third = {t1,t2,...}
# set 支持很多算术运算符
print(first - second) # 求差集
print(first & second) # 求交集
print(first | second) # 求并集
print(first ^ second) # 求差集的并集
四、eval与json
json本质是字符串,其按照指定的数据格式保存数据,是前端与后端交互的一种数据类型
- 详细说明参见:2021.8.17 十三、文件操作.md
# JSON 的使用,把列表、元组、字典等转换成为JSON字符串
person = {'name':'zhangsan','age':18,'gender':'female'}
# 字典如果想要把它传给前端页面或者把字典写入到一个文件里
import json
m = json.dumps(person) # dumps将字典、列表、集合、元组等转换成为JSON字符串
print(m) # "{'name':'zhangsan','age':18,'gender':'female'}"
# 将json字符串转换为python数据类型
# 方法一:eval()内置函数
p = eval(m)
print(type(p)) # dict
# 方法二:json.loads() 可以将json字符串转换成为Python里的数据
s = json.loads(m)
print(type(s)) # dict
- python与json中数据类型对应
|python|json|
|:-😐:-😐
|True|true|
|False|false|
|字符串|字符串|
|字典|对象|
|列表、元组|数组|
五、可迭代对象通用方法
5.1 运算符
在Python里,常见的算术运算符,有一些可以使用于可迭代对象,它们执行的结果也稍有区别
运算符 | Python表达式 | 结果 | 描述 | 支持的数据类型 |
---|---|---|---|---|
+ | [1,2]+[3,4] | [1,2,3,4] | 合并(成新的可迭代对象) | 字符串、列表、元组 |
- | {1,2,3,4} - {2,3} | {1,4} | 集合求差集 | 集合 |
* | [‘Hi!’] * 4 | [‘Hi!’,‘Hi!’,‘Hi!’,‘Hi!’] | 复制 | 字符串、列表、元组、字典 |
in | 3 in (1,2,3) | True | 元素是否存在 | 字符串、列表、元组、字典 |
not in | 4 not in (1,2,3) | True | 元素是否不存在 | 字符串、列表、元组、字典 |
# 特殊的使用 in 判断字典类型数据时,是判断key集合中是否存在
print('zhangsan' in {'zhangsan':12,'lisi':13})
5.2 带下标的遍历
# 带下标的遍历 enumerate 类的使用,一般用于列表和元组等有序的数据
names = ['zhangsan','lisi','wangwu']
for idx,ele in enumerate(names): # [(0,'zhangsan'),(1,'lisi'),(2,'wangwu')]
print(idx,ele)