字典的内置方法

今日内容回顾

  • 字典相关操作
  • 元组相关操作
  • 集合相关操作
  • 字符编码

今日内容详解

1.类型转换

dict() 字典的转换一般不使用关键字 而是直接手动转换

2.字典必须要掌握的操作

2.1按k取值(不推荐使用)

user_dict = {
    'username': 'jason',
    'password': 123,
    'hobby': ['read', 'music', 'run']
    }
    print(user_dict['username'])  # 用k取字典内有点值还是正常可以取到的
    print(user_dict['phone'])  # k不存在会直接报错

2.按内置方法get取值(推荐使用)

user_dict = {
    'username': 'jason',
    'password': 123,
    'hobby': ['read', 'music', 'run']
    }
print(user_dict.get('username'))  # jason
print(user_dict.get('age'))  #取如果没有的就会出现 None
print(user_dict.get('username', '没有哟 嘿嘿嘿'))  # jason   键存在的情况下获取对应的值
print(user_dict.get('phone', '没有哟 嘿嘿嘿'))  # 键不存在默认返回None 可以通过第二个参数自定义

3.修改键值对

user_dict = {
    'username': 'jason',
    'password': 123,
    'hobby': ['read', 'music', 'run']
 print(id(user_dict))   # 查看它的内部地址
 user_dict['username'] = 'tony'  # 键存在则修改对应的值
print(id(user_dict))# 查看它的内部地址 字典是可变类型 值可以变,内部地址不变

4.新增键值对

user_dict = {
    'username': 'jason',
    'password': 123,
    'hobby': ['read', 'music', 'run']
    }
user_dict['age'] = 18  # 键不存在则新增键值对
 print(user_dict) 

5.删除数据

user_dict = {
'username': 'jason',
    'password': 123,
    'hobby': ['read', 'music', 'run']
    }
del user_dict['username'] #选择键直接删除
print(user_dict) 
res = user_dict.pop('password') # 弹出键然后删除
print(user_dict)
print(res)  # 123

6统计字典中键值对的个数

user_dict = {
'username': 'jason',
    'password': 123,
    'hobby': ['read', 'music', 'run']
    }
 print(len(user_dict))  # 3 

7.字典三剑客

剑客一: 一次性获取字典所有的键 .keys

user_dict = {
'username': 'jason',
    'password': 123,
    'hobby': ['read', 'music', 'run']
    }
print(user_dict.keys())  #    dict_keys(['username', 'password', 'hobby'])

剑客二: 一次性获取字典所有的值 .values

user_dict = {
'username': 'jason',
    'password': 123,
    'hobby': ['read', 'music', 'run']
    }
  print(user_dict.values())   #  dict_values(['jason', 123, ['read', 'music', 'run']])

剑客三:一次性获取字典的键值对数据 .items

user_dict = {
'username': 'jason',
    'password': 123,
    'hobby': ['read', 'music', 'run']
    }
  print(user_dict.items()  #  dict_items([('username', 'jason'), ('password', 123), ('hobby', ['read', 'music', 'run'])])
  相当于:
for i in user_dict.items():
   k, v = i
   print(k, v)      

8.补充说明

user_dict = {
'username': 'jason',
    'password': 123,
    'hobby': ['read', 'music', 'run']
    }
print(dict.fromkeys(['name', 'pwd', 'hobby'], 123))  # 快速生成值相同的字典
res = dict.fromkeys(['name', 'pwd', 'hobby'], []) #空列表也可以生成
print(res)  # {'name': [], 'pwd': [], 'hobby': []}
 res['name'].append('jason')  #  当第二个公共值是可变类型的时候 一定要注意 通过任何一个键修改都会影响所有
res['pwd'].append(123)
res['hobby'].append('study')
    print(res)
res = user_dict.setdefault('username','tony')
print(user_dict, res)  # 键存在则不修改 结果是键对应的值
res = user_dict.setdefault('age',123)
print(user_dict, res)  # 存不存在则新增键值对 结果是新增的值

元组相关操作

1.类型转换

tuple()

ps:只要是支持for循环的数据类型都可以转成元组

2.元组必须掌握的方法

t1 = (11,22,33,44,55,66)
1.索引取值
2.切片操作
3.间隔,方向
4.统计元组内数据值的个数
print(len(t1))  # 6
5.统计元组内某个数据值出现的次数
print(t1.count(11))
6.统计元组内指定数据值的索引值
 print(t1.index(22))
7.元组内如果只有一个数据值那么逗号不能少
8.元组内索引绑定的内存地址不能被修改(注意区分 可变与不可变)
 9.元组不能新增或删除数据

集合相关操作

1.类型转换

set()
集合内数据必须是不可变类型(整型 浮点型 字符串 元组)
集合内数据也是无序的 没有索引的概念

2.集合需要掌握的方法

作用:

去重

关系运算

ps:只有遇到上述两种需求的时候才应该考虑使用集合

3.去重:

s1 = {11, 22, 11, 22, 22, 11, 222, 11, 22, 33, 22}
l1 = [11, 22, 33, 22, 11, 22, 33, 22, 11, 22, 33, 22]
s1 = set(l1)
l1 = list(s1)
    print(l1)
集合的去重无法保留原先数据的排列顺序

4.关系运算

群体之间做差异化校验
eg: 两个微信账户之间 有不同的好友 有相同的好友
f1 = {'jason', 'tony', 'jerry', 'oscar'}  # 用户1的好友列表
f2 = {'jack', 'jason', 'tom', 'tony'}  # 用户2的好友列表
1.求两个人的共同好友
 print(f1 & f2)  # {'jason', 'tony'}
2.求用户1独有的好友
 print(f1 - f2)  # {'jerry', 'oscar'}
3.求两个人所有的好友
 print(f1 | f2)  # {'jason', 'jack', 'tom', 'tony', 'oscar', 'jerry'}
4.求两个人各自独有的好友
 print(f1 ^ f2)  # {'oscar', 'tom', 'jack', 'jerry'}
5.父集 子集
    print(f1 > f2)
    print(f1 < f2)

字符编码理论

1.字符编码只针对文本数据
2.回忆计算机内部存储数据的本质
3.既然计算机内部只认识01 为什么我们却可以敲出人类各式各样的字符
肯定存在一个数字跟字符的对应关系 存储该关系的地方称为>>>:字符编码本
4.字符编码发展史
4.1.一家独大
计算机是由美国人发明的 为了能够让计算机识别英文
需要发明一个数字跟英文字母的对应关系
ASCII码:记录了英文字母跟数字的对应关系
用8bit(1字节)来表示一个英文字符
4.2.群雄割据
中国人
GBK码:记录了英文、中文与数字的对应关系
用至少16bit(2字节)来表示一个中文字符
很多生僻字还需要使用更多的字节
英文还是用8bit(1字节)来表示
日本人
shift_JIS码:记录了英文、日文与数字的对应关系
韩国人
Euc_kr码:记录了英文、韩文与数字的对应关系
"""
每个国家的计算机使用的都是自己定制的编码本
不同国家的文本数据无法直接交互 会出现"乱码"
"""
4.3.天下一统
unicode万国码
兼容所有国家语言字符
起步就是两个字节来表示字符
utf系列:utf8 utf16 ...
专门用于优化unocide存储问题
英文还是采用一个字节 中文三个字节

字符编码实操

1.针对乱码不要慌 切换编码慢慢试即可
2.编码与解码
编码:将人类的字符按照指定的编码编码成计算机能够读懂的数据
字符串.encode()
解码:将计算机能够读懂的数据按照指定的编码解码成人能够读懂
bytes类型数据.decode()
3.python2与python3差异
python2默认的编码是ASCII
1.文件头
# encoding:utf8
2.字符串前面加u
u'你好啊'
python3默认的编码是utf系列(unicode)
posted @ 2022-09-30 18:43  hugmi男孩  阅读(49)  评论(0)    收藏  举报