字典,元组,集合与字符编码

字典,元组,集合内置方法

字典内置法

类型转换
语法: 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
posted @ 2022-09-30 17:13  李阿鸡  阅读(31)  评论(0编辑  收藏  举报
Title