数据类型和字符编码

python 数据类型操作

  • 今日内容

字典相关操作

元组相关操作

集合相关操作

字符编码(理论)

字典操作

1. 类型转换,字典的转换一般不使用关键字,而是自己手动转
dict()

2. 字典需要掌握的操作
# 原始数据
user_dict = {'username': 'jason',
             'password': 123,
             'hobby': ['read', 'music', 'run']
             }
2.1 按key取值(不推荐使用,如果这个key不存在会报错)
print(user_dict['username'])  # username jason
jason
2.2 使用内置方法get取值(推荐使用)
2.2.1 使用get获取已经存在的key值
print(user_dict.get('username'))
jason

2.2.2 使用get获取不存在的值
print(user_dict.get('age'))
None

2.2.3 使用get获取不存在的值,并通过第二个参数设定默认返回值
print(user_dict.get('age', 'False'))
False

3.1 字典修改数据值,和列表的重新赋值类似
print(id(user_dict))
user_dict['username'] = 'wesley'
print(id(user_dict), user_dict)
4337316352  # 从内存ID上看,字典是一个可变参数
4337316352 {'username': 'wesley', 'password': 123, 'hobby': ['read', 'music', 'run']} 

3.2 如果修改的key并不存在,则会新建
user_dict['age'] = 18
print(user_dict)
{'username': 'jason', 'password': 123, 'hobby': ['read', 'music', 'run'], 'age': 18}


3.3 删除数据,删除username数据
del user_dict['username']
print(user_dict)
{'password': 123, 'hobby': ['read', 'music', 'run']}

3.4 len() 方法同样可以用于字典内的统计,这个统计的是字典内的元素
print(len(user_dict))

4. 字典三剑客

4.1 keys()  获取字典中所有的key
print(user_dict.keys())
dict_keys(['username', 'password', 'hobby'])

4.2 values()  获取字典中所有的values值
print(user_dict.values())
dict_values(['jason', 123, ['read', 'music', 'run']])

4.3 itmes()  一次性获取字典所有的值
print(user_dict.items())
dict_items([('username', 'jason'), ('password', 123), ('hobby', ['read', 'music', 'run'])])

5. fromkeys  快速生成值相同的值的字典
print(dict.fromkeys(['name', 'pwd', 'hobby'], [123]))
{'name': [123], 'pwd': [123], 'hobby': [123]}
"""
这里fromkeys生成的是相同的值的字典,最后一个代表数据值的[]中是每个key都需要调用的,会被公共调用,通过下面的代码可以看出来,如果修改其中一个key的数据,那其他的都会更改
"""
print(dict.fromkeys(['name', 'pwd', 'hobby'], []))
res = dict.fromkeys(['name', 'pwd', 'hobby'], [])
res['name'].append('jason')
res['pwd'].append(123)
res['hobby'].append('study')
print(res)
{'name': ['jason', 123, 'study'], 'pwd': ['jason', 123, 'study'], 'hobby': ['jason', 123, 'study']}

6. setdefault  key存在则不修改,结果是key对应的value
6.1 key存在则不修改,结果是key对应的值
res = user_dict.setdefault('username', 'wesley')
print(user_dict, res)

6.2 key不存在会则会增加键值对,结果是新增的值
res = user_dict.setdefault('age', 18)
print(user_dict, res)
{'username': 'jason', 'password': 123, 'hobby': ['read', 'music', 'run'], 'age': 18} 18

7. popitem() # 弹出键值对,后进先出
print(user_dict.popitem())
('hobby', ['read', 'music', 'run'])

元组相关操作

1. tuple() 支持for循环的数据类型都可以转成元组
# 原始数据
t1 = (11, 22, 33, 44,55, 66)

2. 元组需要掌握的方法
2.1 索引取值
2.2 切片操作
2.3 间隔,方向,步长
2.4 统计元组内数据值的个数
len(t1)  # 6
2.5 统计元组内某个数据值出现的次数
print(t1.count(11))
2.6 统计元组内指定数据值的索引值
print(t1.index(22))

3. 注意,如果元组内只有一个数据值,需要加上一个逗号,
4. 注意,元组内索引绑定的内存地址不能被修改(需要注意区分,可变于不可变数据类型)
5. 元组不能新增或删除数据

### 集合相关操作

```python
1. 类型转换 set()
1.1 集合内数据必须是不可变类型(整型 浮点型 字符串 元组)
1.2 集合内数据也是无序的,没有索引的概念
2. 集合需要掌握的方法
2.1 去重
2.2 关系运算
2.3 只有运到上述两种需求的时候才应该考虑集合

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. 关系运算
群体之间做差异化校验
两个微信账户之间 有不同的好友 有相同的好友
f1 = {'jason', 'tony', 'jerry', 'oscar'}  # 用户1的好友列表
f2 = {'jack', 'jason', 'tom', 'tony'}  # 用户2的好友列表
4.1 求两让的共同好友(交集)&
print(f1 & f2)

4.2 求f1 独有的好友 (差集)
print(f1 - f2)

4.3 求f1和f2所有的好友 (合集)
print(f1 | f2)

4.4 求f1和f2独自的好友
print(f1 ^ f2)

4.5 父集: 大集合包含了小集合被称为被包含的小集合的父集
print(f1 > f2)
4.6 子集: 被大集合包含的小集合被称为这个大集合的子集
print(f1 < f2)

字符编码理论

  1. 字符编码只针对文本数据
  2. 回忆计算机内部存储数据的本质
  3. 既然计算机内部只认识01 为什么我们却可以敲出人类各式各样的字符
    肯定存在一个数字跟字符的对应关系 存储该关系的地方称为>>>:字符编码本
  4. 字符编码发展史
    4.1 一家独大
    计算机是由美国人发明的 为了能够让计算机识别英文,需要发明一个数字跟英文字母的对应关系
    ASCII码:记录了英文字母跟数字的对应关系,用8bit(1字节)来表示一个英文字符

4.2 群雄割据
4.2.1 中国
GBK码:记录了英文、中文与数字的对应关系,用至少16bit(2字节)来表示一个中文字符,很多生僻字还需要使用更多的字节,英文还是用8bit(1字节)来表示
4.2.2 日本
shift_JIS码:记录了英文、日文与数字的对应关系
4.2.3 韩国人
Euc_kr码:记录了英文、韩文与数字的对应关系

4.2.4 天下一统
unicode万国码,兼容所有国家语言字符,起步就是两个字节来表示字符
utf系列:utf8 utf16 ...
专门用于优化unocide存储问题
英文还是采用一个字节 中文三个字节
4.3 乱码的现象
每个国家的计算机使用的都是自己定制的编码本,不同国家的文本数据无法直接交互 会出现"乱码"

posted @ 2025-03-13 11:26  樵夫-  阅读(13)  评论(0)    收藏  举报