数据类型内置方法(三)
数据类型内置方法(三)
字典的内置方法
-
类型转换
1. 字典的定义 方式一: dict1 = {'name':'petter','age':18} 方式二: dict1 = dict(name = 'petter', age = 18) 2. 类型转换(以后多数是直接定义字典,用到转换的非常少) 用法一: dict1 = dict([['name','petter'],('age',18)]) print(dict1) 运行结果: {'name': 'petter', 'age': 18} 用法二:fromkeys方法 print(dict.fromkeys([11, 22, 33])) print(dict.fromkeys([11, 22, 33],99)) 运行结果: {11: None, 22: None, 33: None} {11: 99, 22: 99, 33: 99} # fromkeys(参数1,参数2),以参数1的每个元素为新字典的key,参数2为新字典每个key对应的value,不写默认为None,参数1必须是可以for循环的数据类型,参数2可以是任意数据类型
-
常用方法
dict1 = {'name': 'petter', 'age': '18','hobby':['eat','sleep']} # 1. 按key取值 # 方式一: # print(dict1['name']) # >>>petter # 缺点:当key不存在时,会直接报错 # 方式二: # print(dict1.get('name')) # print(dict1.get('oscar')) # print(dict1.get('oscar', '这个key不存在')) # >>>petter # >>>None # >>>这个key不存在 # 推荐使用这种方式,即使key不存在,也不会报错,导致程序停止,且可以自己定义提示语句,当key不存在时,默认输出None,如果定义提示语句,则会输出提示语句 ====================================================== # 2.修改值 字典也是可变类型 # dict1['name'] = 'oscar' # 直接根据key修改value即可 # print(dict1) # >>>{'name': 'oscar', 'age': '18', 'hobby': ['eat', 'sleep']} ====================================================== # 3. 添加键值对 # dict1['heiget'] = 185 # 键不存在则是新增一个键值对 # print(dict1) # >>>{'name': 'petter', 'age': '18', 'hobby': ['eat', 'sleep'], 'heiget': 185} ====================================================== # 4.统计字典中键值对的个数 # print(len(dict1)) # >>>3 ====================================================== # 5.成员运算 # print('name' in dict1) # print('petter' in dict1) # >>>True # >>>False # 只能判断key是否是成员变量 ====================================================== # 6.删除键值对 # 方式一:(根据索引key删除整个键值对) # del dict1['name'] # print(dict1) # >>>{'age': '18', 'hobby': ['eat', 'sleep']} # 方式二:(根据索引key弹出键值对) # print(dict1.pop('name')) # print(dict1) # >>>petter # 弹出name对应的value值petter # >>>{'age': '18', 'hobby': ['eat', 'sleep']} # 方式三:(随机弹出,用的非常少) # print(dict1.popitem()) # print(dict1) # >>>('hobby', ['eat', 'sleep']) #随机弹出一个键值对,而不是value # >>>{'name': 'petter', 'age': '18'} ====================================================== # 7. 获取所有的键 所有的值 所有的键值对 # print(dict1.keys()) # 获取所有key,返回值可以看成列表 # print(dict1.values()) # 获取所有value,返回值可以看成列表 # print(dict1.items()) # 获取所有键值对,返回值可以看成列表套元组 # >>>dict_keys(['name', 'age', 'hobby']) # >>>dict_values(['petter', '18', ['eat', 'sleep']]) # >>>dict_items([('name', 'petter'), ('age', '18'), ('hobby', ['eat', 'sleep'])]) # 原理: # 循环遍历字典,取出每一个key或者value,或者整个键值对 """在python2中上述三个方法就是直接返回一个列表 """ ======================================================
-
需要了解的操作
dict1 = {'name': 'petter', 'age': '18','hobby':['eat','sleep']} # 1. update更新字典 # dict1.update({'name':'oscar','age':19,'height':185}) # print(dict1) # >>>{'name': 'oscar', 'age': 19, 'hobby': ['eat', 'sleep'], 'height': 185} # 当key存在时,更新value,当key不存在时,新建键值对 ====================================================== # 2.fromkeys()快速生成字典(很少用到) # dict2 = dict.fromkeys([1,2,3],[]) # print(dict2) # >>>{1: [], 2: [], 3: []} """面试题""" # dic['k1'].append(111) # 三个键指向的是同一个列表,append是给整个字典赋值,所有的key都指向同一个value # print(dic) # >>>{'k1': [111], 'k2': [111], 'k3': [111]} ====================================================== # 3.setdefault() # print(dict1.setdefault('height', 185)) # 键不存在则新增键值对 并且有返回结果是新增的v # >>>185 # print(dic.setdefault('name', 'oscar')) # 键存在 则返回对应的值 不做修改 # print(dict1) # >>>petter # >>>{'name': 'petter', 'age': '18', 'hobby': ['eat', 'sleep']}
元组内置方法
- 类型转换
# 元组可以看成不可变的列表
'''支持for循环的数据类型都可以转成元组'''
# print(tuple(11)) # 报错
# print(tuple(11.11)) # 报错
print(tuple('jason'))
print(tuple([11,22,33,44]))
print(tuple({'name':'jason'}))
print(tuple({11,22,33,44}))
# print(tuple(True)) # 报错
-
元组的特性
当元组内只有一个值时,一定要在值后加个逗号,不然整个元组会被系统识别为该值的数据类型 eg: t1 = (11, 22) t2 = (11) t3 = (11,) print(type(t1)) print(type(t2)) print(type(t3)) 运行结果: <class 'tuple'> <class 'int'> <class 'tuple'> """ 一般情况下 我们会习惯性的将所有可以存储多个数据的类型的数据 如果内部只有一个元素 也会加逗号 (1,) [1,] {1,} {'name':'jason',} """
-
常用方法
t1 = (11, 22, 33, 44, 55, 66) # 1. 索引取值 # t1 = (11, 22, 33, 44, 55, 66) # print(t1[0]) # >>>11 # >>>66 ====================================================== # 2. 切片,步长[起点:终点:步长] # print(t1[0:3]) # print(t1[0:3:2]) # print(t1[-5:-1:2]) # >>>(11, 22, 33) # >>>(11, 33) # >>>(22, 44) ====================================================== # 3. 统计元组内元素的个数 # print(len(t1)) # >>>6 ====================================================== # 4. 成员运算 # print(11 in t1) # print(88 in t1) # >>>True # >>>False ====================================================== # 5.统计某个元素出现的次数 # print(t1.count(22)) # >>>1 ====================================================== # 7.元组内元素不能"修改": 元组内各个索引值指向的内存地址不能修改 # t1[0] = 111 #报错 """ 笔试题 tt = (11, 22, 33, [11, 22]) tt[-1].append('heiheihei') 问:执行之后的结果 正确答案选B A.报错 B.正常添加 C.不知道 ### tt[-1] == [11,22],列表添加元素当然可以添加 ### """
集合内置方法
-
类型转换
# print(set(11)) # 报错 # print(set(11.11)) # 报错 # print(set('jason')) # print(set([11,22,33,44])) # print(set({'name':'jason'})) # print(set((11,22,33))) # print(set(True)) # 报错 """集合内元素只能是不可变类型"""
-
两大功能
1. 去重 集合内不能出现重复的元素(自带去重特性) 如果出现了 会被集合自动去重 eg: s1 = {1,1,5,6,4,8,8,4,6,4,7} print(s1) 运行结果: {1, 4, 5, 6, 7, 8} 2. 关系运算 判断两个群体内的差异 eg:共同好友 共同关注 共同点赞 # 关系运算 f1 = {'jason', 'kevin', 'tony', 'jerry'} # 小李的好友列表 f2 = {'jason', 'tom', 'jerry', 'jack'} # 小王的好友列表 # 1.求两个人的共同好友 # print(f1 & f2) # {'jerry', 'jason'} # 2.求小李的单独好友 # print(f1 - f2) # {'kevin', 'tony'} # 3.求两个人所有的好友 # print(f1 | f2) # {'kevin', 'jack', 'tom', 'jason', 'jerry', 'tony'} # 4.求两个人各自的好友 print(f1 ^ f2) # {'jack', 'tony', 'tom', 'kevin'}
垃圾回收机制
"""python底层针对空间的申请和释放都是设计好的 不需要程序员操心"""
1. 引用计数
一个变量被一个变量名指向时,他的引用计数就是1,被两个变量名指向就是2,当没有变量名指向变量时,这个变量的引用计数就是0,Python会将其清除
2. 标记清除
当内存空间即将溢出时,Python会自动启动应急机制,停止程序运行,挨个检查引用计数为0的数据并打上标记,然后一次清除
3. 分代回收
根据数据存在时间长短,将值换分成三个等级
存在时间短的数据 监测机制检测的时间间隔越短
存在时间长的数据 监测机制检测的时间间隔越长
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?