字典,元组,集合内置方法
字典内置法
类型转换
语法: dict()
一般情况下不用dict转字典,主要是自己动手转字典。基本上不用
print(dict(11)) # 整型 报错
print(dict(11.11)) # 浮点型 报错
print(dict('tank')) # 字符串 报错
print(dict([11, 22, 33, 44])) # 列表 报错
print(dict((11, 22, 33, 44))) # 元组 报错
print(dict({11, 22, 33, 44})) # 集合 报错
必须掌握的操作
按k取值
name_dict = {'name’:'tank', 'age':123 }
print(name_dict['name']) # tank
不推荐使用
内置方法get取值(推荐使用)
.get
name_dict = {'name’:'tank', 'age':123 }
print(name_dict.get('username')) # tank
print(name_dict.get['hobby']) # 返回None
print(name_dict.get('age', '没有哦')) # 123,键存在的情况下获取对应的数据值
print(name_dict.get('hobby', '真没有')) #键值不存在返回None 根据第二个参数返回真没有
修改键值对
name_dict = {'name’:'tank', 'age':123}
name_dict['name'] = 'jason' # 修改name键对应的值为jason
print(name_dict) # jason
"""键存在则修改对应的键值,键不存在则新增键值对"""
name_dict['hobby'] = 'rap' # 修改hobby键对应的值为rap,因为字典里不存在hobby键值,则新增键值对
删除数据
可以使用前面学过的, del .remove .pop 来操作
name_dict = {'name':'tank', 'age': 123}
del name_dict['name'] # del删除name_dict表中的name键值
print(name_dict) # {'age': 123}
---------------------------------------------------------------------------------
.pop方法
name_dict = {'name':'tank', 'age': 123}
res = name_dict.pop('age') # .pop弹出的数据age绑定一个res变量名
print(name_dict) # {'name': 'tank'}
print(res) # 123
字典三剑客
.keys
他可以一次性获取字典所有的键,结果支持for循环
name_dict = {'name':'tank', 'age': 123}
print(name_dict.keys()) # 一次性获取字典所有的键,dict_keys(['name', 'age']) 键就是k
---------------------------------------------------------------------------------
.values
一次性获取字典所有的值
name_dict = {'name':'tank', 'age': 123}
print(name_dict.values()) # 一次性获取字典所有的值,dict_values(['tank', 123])
---------------------------------------------------------------------------------
.items
一次获取字典的键值对数据(生成的是元组)
name_dict = {'name':'tank', 'age': 123} #一次性获取字典的所有的键值对
print(name_dict.items()) #dict_items([('name', 'tank'), ('age', 123)])
小知识:
name_dict = {'name':'tank', 'age': 123}
for i in name_dict.items(): # i 在字典中循环取键对值
print(i) #('name', 'tank')
#('age', 123)
高级玩法: #解压赋值
for i,j in name_dict.items(): # 对应的变量名获取解压赋值
print(i,j) # name tank age 123
---------------------------------------------------------------------------------
详解:
for i in name_dict.items(): # i 在字典中循环取键对值
j, k = i # j k变量名 解压赋值 i
print(j, k) # name tan age 123
字典内置补充说明
.fromkeys
快速生产值相同的字典
print(dict.fromkeys(['name', 'pwd', 'hobby'], 123))
# {'name': 123, 'pwd': 123, 'hobby': 123}
res = doct.fromkeys(['name', 'pwd', 'hobby'], [])
# {'name': [], 'pwd': [], 'hobby': []}
print(res)
前方注意有大坑,[]公用数据是个可变类型,所有的键
'name', 'pwd', 'hobby' 指定的对象都是[],修改一个所有都会改。[]列表是个可变量类型。
不可变类型 修改后可以逐个更改
---------------------------------------------------------------------------------
.setdefault
name_dict = {'name':'tank', 'age': 123}
name_dict.setdefault('name', 'tanke') # {'name': 'tank', 'age': 123}
键存在就不做修改,键不存在则新添加一个 键值对
name_dict.setdefault('hobby', 'rap')
print(name_dict) # {'name': 'tank', 'age': 123, 'hobby': 'rap'}
元组内置操作
类型转换
tuple()
支持for循环的数据类型都可以转成元组
print(tuple('owen')) # 字符串
print(tuple([11, 22, 33, 44])) # 列表
print(tuple({'name': 'owen'})) # 字典
print(tuple({11, 22, 33, 44})) # 集合
元组的特性(自己+的)
当元组内只有一个元素的时候,根据type查看都不是元组型
而在但个元素后加上逗号,他们才能显示为元组型
'''所以在存储数据时,如果内部只有一个元素,加个逗号'''
索引,切片,间隔,统计个数,成员运算,统计某个元素出现的次数
1、索引取值
l1 = (1, 2, 3, 4, 56)
print(l1[2]) # 结果为3
---------------------------------------------------------------------------------
2、切片操作
l1 = (1, 2, 3, 4, 56)
print(l1[0:2]) # 结果为(1, 2)
---------------------------------------------------------------------------------
3、间隔
l1 = (1, 2, 3, 4, 56)
print(l1[0:4:2]) # 结果为(1, 3)
---------------------------------------------------------------------------------
4、统计元组内元素的个数(len)
l1 = (1, 2, 3, 4, 56)
print(len(l1)) # 结果为5
---------------------------------------------------------------------------------
5、成员运算(in)
l1 = (1, 2, 3, 4, 56)
print(56 in l1) # 结果为true
---------------------------------------------------------------------------------
6、统计某个元素出现的次数(count)
l1 = (1, 2, 3, 4, 56)
print(l1.count(2)) # 结果为1
---------------------------------------------------------------------------------
1.统计元组内指定数据的索引值
l1 = (1, 2, 3, 4, 56)
print(l1.index(1)) # 结果为 0
集合相关操作
类型转换
print(set(11)) # 报错
print(set(11.11)) # 报错
print(set('tank')) # {'t', 'a', 'n', 'k'}
print(set([11,22,33,44])) # {33, 11, 44, 22}
print(set({'name':'tank'})) # {'name'}
print(set((11,22,33))) # {33, 11, 22}
print(set(True)) # 报错
'''整数、浮点型、布尔值无法转换,集合内元素只能是不可变的类型'''
集合也是无序的没有索引概念
去重
a1 = {1, 2, 2, 2, 2, 2, 5, 4, 4, 4, 6, 6, 6, 6, }
print(a1) # {1, 2, 4, 5, 6}
关系运算
2、关系运算
判断两个群体的差异,是否有相同的、不同的
l1 = {'owen', 'kery', 'mark', 'jerry'} # 小李的好友列表
l2 = {'mark', 'tom', 'jerry', 'jack'} # 小王的好友列表
# 1.求两个人的共同好友(&)
print(l1 & l2) # {'mark', 'jerry'}
# 2.求小李的单独好友(-)
print(l1 - l2) # {'owen', 'kery'}
# 3.求两个人所有的好友(|)
print(l1 | l2) # {'mark', 'jerry', 'tom', 'owen', 'jack', 'kery'}
# 4.求两个人各自的好友(^)
print(l1 ^ l2) #{'tom', 'owen', 'jack', 'kery'}
字符编码理论
1、编码和解码
编码 (encode) :
将人类能够理解的字符编码成计算机能够直接读懂的字符
解码 (decode):
将计算机能够理解的字符解码成人类能够直接读懂的字符
编码 encode
l1 = '小嘛小二郎 背着书包上学堂'
print(l1.encode('utf8'))
结果 b'\xe5\xb0\x8f\xe5\x98\x9b\xe5\xb0\x8f\xe4\xba\x8c\xe9\x83\x8e \xe8\x83\x8c\xe7\x9d\x80\xe4\xb9\xa6\xe5\x8c\x85\xe4\xb8\x8a\xe5\xad\xa6\xe5\xa0\x82'
"""
字符窜前面如果加了字母'b'表示该数据类型为bytes类型
bytes类型可以看成二进制 """
------------------------------------------------------------------------------------
解码 decode
l2 = b'\xe5\xb0\x8f\xe5\x98\x9b\xe5\xb0\x8f\xe4\xba\x8c\xe9\x83\x8e\xe8\x83\x8c\xe7\x9d\x80\xe4\xb9\xa6\xe5\x8c\x85\xe5\xb0\x9a\xe5\xad\xa6\xe5\xa0\x82'
print(l2.decode('utf8'))
结果 小嘛小二郎 背着书包上学堂
"""
基于网络传输数据,数据都必须是二进制格式
"""
------------------------------------------------------------------------------------
数据当初以什么编码编,就用什么编码解码即可
3、python解释器
python2解释器默认的编码是ASCII码
1、文件头:必须写在文件的最上方,告诉解释器使用指定的编码
coding:utf8
美化后的写法: _*_ coding:utf8 _*_
2、字符前缀:在使用python2解释器的环境下定义字符串要在前面加个u
name = u'你好哇'
在python3解释器中默认的编码是utf8