数据类型内置方法(下)——字典、元组、集合
五、字典内置方法
1.类型转换 dict()
字典的转换比较麻烦,一般不使用关键字,而是自己转。
2. 取值
(1)按k取值(不推荐使用)
* key要放在中括号里[key],k不存在直接报错
user_dict = {
'name': 'Alex',
'age': 18,
'hobbies': ['play game', 'basketball']
}
print(user_dict['name']) # Alex print(user_dict['phone']) # k不存在会直接报错
(2)按内置方法get取值(推荐使用)
* key放在小括号里,key不存在显示None
print(user_dict.get('name')) # Alex
print(user_dict.get('name')) # None k不存在显示None
补充:两个参数的情况下,按前面的参数取值,前面的参数不存在则显示None。最多只能有两个参数,不然报错。
print(user_dict.get('name','age')) # Alex 两个参数同时存在,按前面的取值 print(user_dict.get('age','name')) # 18 两个参数同时存在,按前面的取值
print(user_dict.get('name','job')) # Alex 一个参数存在一个键不存在,按前面的取值
print(user_dict.get('job','name')) # None 两个参数,前面的不存在,显示None
3. 修改值数据
user_dict = { 'name': 'Alex', 'age': 18, 'hobbies': ['play game', 'basketball'] } print(id(user_dict)) # 2720408952960 print(user_dict) # {'name': 'Alex', 'age': 18, 'hobbies': ['play game', 'basketball']} user_dict['name'] = 'Tony' print(id(user_dict)) # 2720408952960 # id 没有发生变化 print(user_dict) #{'name': 'Tony', 'age': 18, 'hobbies': ['play game', 'basketball']} 如果key原先存在于字典,则会修改对应value的值 user_dict['job'] = 'Teacher' print(id(user_dict)) # 2720408952960 # id没有发生变化 print(user_dict) # {'name': 'Tony', 'age': 18, 'hobbies': ['play game', 'basketball'], 'job': 'Teacher'} 如果key原先不存在于字典,则会新增key:value
4. 删除数据
user_dict = {
'name': 'Alex',
'age': 18,
'hobbies': ['play game', 'basketball']
}
方法1:
del user_dict['name'] print(user_dict) # {'age': 18, 'hobbies': ['play game', 'basketball']} 通过指定字典的key来删除字典的键值对
方法2:
user_dict.pop('name') print(user_dict) # {'age': 18, 'hobbies': ['play game', 'basketball']} 通过指定字典的key来删除字典的键值对
5. 统计字典中键值对的个数
print(len(user_dict)) # 3
6. 获取字典的键keys(),值values(),键值对items()
print(user_dict.keys()) # dict_keys(['name', 'age', 'hobbies']) print(user_dict.values()) # dict_values(['Alex', 18, ['play game', 'basketball']]) print(user_dict.items()) # dict_items([('name', 'Alex'), ('age', 18), ('hobbies', ['play game', 'basketball'])])
通过循环取值
for i in user_dict.items(): k, v = i print(k, v) """ name Alex age 18 hobbies ['play game', 'basketball'] """
7. 其他(很少用到)
fromkeys()
快速生成值相同的字典
方法1:
print(dict.fromkeys(['k1', 'k2', 'k3'], 123)) # {'k1': 123, 'k2': 123, 'k3': 123} 三个键生成相同的值
方法2:
res = dict.fromkeys(['k1', 'k2', 'k3'], 123) print(res) # {'k1': 123, 'k2': 123, 'k3': 123}
append()
当第二个公共值是可变类型的时候 一定要注意 通过任何一个键修改都会影响所有
res = dict.fromkeys(['k1', 'k2', 'k3'], []) res['k1'].append('jason') print(res) # {'k1': ['jason'], 'k2': ['jason'], 'k3': ['jason']} 每一个健对应的值都会修改 res['k2'].append(123) print(res) # {'k1': [123], 'k2': [123], 'k3': [123]} 每一个健对应的值都会修改 res['k3'].append('study') print(res) # {'k1': ['study'], 'k2': ['study'], 'k3': ['study']} 每一个健对应的值都会修改
setdefault()
res = user_dict.setdefault('name','tony') print(user_dict, res) # {'name': 'Alex', 'age': 18, 'hobbies': ['play game', 'basketball']} Alex 键存在则不修改,结果是键对应的值 res = user_dict.setdefault('job','teacher') print(user_dict, res) # {'name': 'Alex', 'age': 18, 'hobbies': ['play game', 'basketball'], 'job': 'teacher'} teacher 不存在则新增键值对,结果是新增的值
1. 类型转换
tuple()
支持for循环的数据类型都可以转成元组
2.索引取值
(正向取+反向取):只能取,不能改否则报错!
3.切片操作
(顾头不顾尾,步长)
4.统计元组内数据值的个数
len(t1)
5. 统计元组内某个数据值出现的次数
t1.count(数据值))
6. 统计元组内指定数据值的索引值
print(t1.index(索引值))
补充说明:
- 元组内如果只有一个数据值那么逗号不能少
- 元组内索引绑定的内存地址不能被修改(注意区分 可变与不可变)
- 元组不能新增或删除数据
七、集合内置方法
1.类型转换
set()
- 集合内数据必须是不可变类型(整型,浮点型,字符串,元组)
- 集合内数据是无序的,没有索引的概念
2.集合需要掌握的方法
去重
(集合的去重无法保留原先数据的排列顺序)
l1 = [11, 22, 33, 22, 11, 22, 33, 22, 11, 22, 33, 22] s1 = set(l1) l1 = list(s1) print(l1) # [33, 11, 22]
关系运算
例: 两个微信账户之间 有不同的好友 有相同的好友
f1 = {'jason', 'tony', 'jerry', 'oscar'} # 用户1的好友列表
f2 = {'jack', 'jason', 'tom', 'tony'} # 用户2的好友列表
1.求两个人的共同好友
print(f1 & f2) # {'tony', 'jason'}
2. 求用户1独有的好友
print(f1 - f2) # {'oscar', 'jerry'}
3. 求两个人所有的好友
print(f1 | f2) # {'jerry', 'tony', 'oscar', 'jack', 'tom', 'jason'}
4. 求两个人各自独有的好友
print(f1 ^ f2) # {'oscar', 'tom', 'jerry', 'jack'}
5. 父集、子集
print(f1 > f2) # False print(f1 < f2) # False