1. 元组
- 元组是一个不可变序列(tuple)
- 符号为()
()是可以省略的,但当创建元组有其他元素时,必须要有==‘,’== tuple1=()
空元组- 元组也可以存放一切
tuple1 = (1, None, False, [])
1.1 元组的拆包
这里以实例来说明:
# 拆包
tuple1 = (1, 2, 3)
a, b, c = tuple1
print(a, b, c)
运算得出:
# 特例
tuple1 = (1, 2, 3, 4)
a, b, c = tuple1
print(a, b, c)
这里会报错,因为元组tuple1中有太多值需要被拆包。
对于这个问题,引入‘*——通配符’概念
’ * ’ 是通配符表示符号,可以代表所有,另外将转化为列表形式。
# 通配符使用举例
tuple1 = (1, 2, 3, 4)
a, b, *c = tuple1
print(a, b, c)
运行得出
补充说明
字符串以及列表的拆包,类似元组拆包。
2. 字典
- 数据结构为映射-mapping,即查询。
- 映射——一一对应的关系。
- 表示形式Key-Value, 称为一个键值对,又或者称为一项。
- 字典类型dict
- 表示符号{}
dict1 = {}
是一个空字典。- 字典无索引
# 举例
# 正常使用
dict1 = {'name': 'David', 'Skill': 'Python', 'Age': '27', 'Gender': 'Male'}
# dict()
dict2 = dict(name='David', Skill='Python', Age='27', Gender='Male')
# 双值序列
dict3 = dict([('name', 'David'), ('Skill', 'Python'), ('Age', '27'), ('Gender', 'Male')])
print('\n', dict1, '\n', dict2, '\n', dict3)
运行得到
2.1 字典的增删改查
命令 | 含义 |
---|---|
len() | 长度显示 |
dict.get() | 取值 |
dict[] | 取值 |
dict[]= | 替换 |
dict.update() | 字典添加 |
del dict[] | 指定删除 |
dict.popitem() | 默认删除最后一项 |
dict.pop() | 指定删除 |
举例即注意事项:
dict1 = {'name': 'David', 'Skill': 'Python', 'Age': '27', 'Gender': 'Male'}
print(len(dict1)) # 长度显示,按项统计
print(dict1.get('name'),dict1['name']) # 两种根据Key取值方法
print(dict1.get('sex')) # 不报错,显示没有sex项
# print(dict1['sex']) # 报错,因为字典中无sex项
# 字典修改(替换,添加)
dict1['Age'] = 18 # 有当前Key,进行替换
dict1['Hobby'] = 'hiking' # 无当前Key,添加新项
print(dict1)
dict2 = {'1' : 1, '2' : 2, '3' : 3}
dict1.update(dict2) # 其他字典添加
print(dict1)
del dict1['Age'] # 指定Key删除
dict1.popitem() # 默认删除最后一项
print(dict1)
print(dict1.pop('name')) # 指定删除,有Key时,返回对应Value
print(dict1.pop('4', 4)) # 指定删除,无Key时,返回指定Value 4
运行得出
2.2 深拷贝以及浅拷贝
copy.copy()
浅拷贝——不拷贝第二层数据——即嵌套在内的数据类型
import copy
dict1 = {'name':123, 'date':[1, 2, 3]}
dict2 = copy.copy(dict1)
copy.deepcopy()
深拷贝——将所有数据进行复制
总结:
- 浅拷贝只是创建表层数据,因此在内数据id相同;而深拷贝是全部重新创建,内在id也发生了改变。
- 不可变数据类型——value变,id变;value不变,id不变。
可变数据类型——id一直不一样。
2.3 遍历字典
- Key遍历表达式:
keys()
语句:for k in dict.keys():
- Value遍历表达式:
values()
语句:for v in dict.values():
- 项遍历表达式:
items()
语句:for k,v in dict.items():
3 集合
总体特点和列表相似,因此这个内容注重不同点的对比
- 只能存储不可变数据对象
- 存储对象为无序的——不支持索引
- 不能出现重复内容——去重
- 集合类型:set
- 符号:{}
- 空集合建立:
set1 = set()
3.1 集合使用
命令 | 含义 |
---|---|
in | 是否包含在集合内 |
not in | 是否不包含在集合内 |
set.add() | 添加元素 |
set.update() | 添加新的集合 |
set.pop() | 默认从删除第一个数据 |
set.remove() | 指定元素删除 |
set.clear() | 清空集合 |
3.2 集合运算
符号 | 含义 |
---|---|
& | 交集 |
| | 并集 |
- | 差集 |
^ | 亦或集 |
<= | 是否为子集 |
< | 是否为真子集 |
>= | 是否为超集 |
> | 是否为真超集 |
课后练习
# Q1
a = {'name':'123', 'data':{'result':[{'src':'python1'}, {'src':'python2'},{'src':'python3'}]}}
b = a.get('data')
print(b)
c = b.get('result')
print(c)
print(c[0].get('src'), c[1].get('src'), c[2].get('src'))
# Q2
a = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
Key1 = []
Key2 = []
for b in a:
if b > 66:
Key1.append(b)
elif b < 66:
Key2.append(b)
else:
continue
set1 = {'大于66':Key1, '小于66':Key2}
print(set1)
得出: