python基础基础数据类型3
发布于 2021-04-17 05:46 ,所属分类:知识学习综合资讯
目录
基础数据类型:
字典(dict)
集合(set)
基础数据类型
字典(dict)
字典可以存储大量关联性比较强的数据,查询速度非常快,但内存消耗巨大。

(点击查看大图)
字典的创建
# 创建字典{'one': 1, 'two': 2, 'three': 3}'''方式一'''dic1 = {'one': 1, 'two': 2, 'three': 3}'''方式二'''dic = dict() # 创建空字典print(dic) # {}dic2 = dict((('one', 1), ('two', 2), ('three', 3)))dic3 = dict([('one', 1), ('two', 2), ('three', 3)])dic3 = dict(one=1, two=2, three=3)dic4 = dict({'one': 1, 'two': 2, 'three': 3})dic5 = dict(zip(['one', 'two', 'three'], [1, 2, 3]))'''方式三:字典推导式'''dic6 = {k: v for k, v in [('one', 1), ('two', 2), ('three', 3)]}
(左右滑动查看完整代码)
'''方式四:利用fromkey字典的所有key来自一个可迭代对象字典的value使用同一个值'''dic7 = dict.fromkeys('abcd', 'pamela')print(dic7) # {'a': 'pamela', 'b': 'pamela', 'c': 'pamela', 'd': 'pamela'}dic8 = dict.fromkeys(['one', 'two', 'three'], 123)print(dic8) # {'one': 123, 'two': 123, 'three': 123}'''!如果通过fromkeys得到的字典的value为可变数据类型,要注意'''dic = dict.fromkeys([1, 2, 3], [])print(dic) # {1: [], 2: [], 3: []}dic[1].append(666)print(dic) # {1: [666], 2: [666], 3: [666]}print(id(dic[1]), id(dic[2]), id(dic[3])) # 1655023409736 1655023409736 1655023409736
(左右滑动查看完整代码)
字典的合法性
字典以{}括起来,里面的内容是以键值对的形式储存的。
键key:必须是不可变(可哈希)的数据类型,并且键是唯一的,不重复的。
值Value:可以是任意数据(int,str,bool,tuple,list,dict,set),包括实例对象等。
不可变(可哈希)的数据类型:int,str,bool,tuple。
可变(不可哈希)的数据类型:list,dict,set。
# 合法dic = {123: 456, True: 999, "id": 1, "name": 'pamela', "age": 18, "s": ['abc', 'def'], (1, 2, 3): 'apple'}print(dic[123]) # 456print(dic[True]) # 999print(dic['id']) # 1print(dic['s']) # ['abc', 'def']print(dic[(1, 2, 3)]) # apple# 不合法dic = {[1, 2, 3]: 'abc'} # list是可变的. 不能作为key TypeError: unhashable type: 'list'dic = {{1: 2}: "abc"} # dict是可变的. 不能作为key TypeError: unhashable type: 'dict'dic = {{1, 2, 3}: 'abc'} # set是可变的, 不能作为key TypeError: unhashable type: 'set'
(左右滑动查看完整代码)
字典的增删改查
1.增
'''通过键值对直接增加:没有此key,就增加键值对有此key,就修改key对应的value'''dic = {'name': 'pamela', 'age': 18}dic['weight'] = 75 # 没有weight这个key,就增加键值对print(dic) # {'name': 'pamela', 'age': 18, 'weight': 75}dic['name'] = 'apple' # 有name这个key,就成了字典的改值print(dic) # {'name': 'apple', 'age': 18, 'weight': 75}
(左右滑动查看完整代码)
'''setdefault:没有此key,就增加键值对有此key,就不变有返回值,返回值为增加的键值对中的value'''dic = {'name': 'pamela', 'age': 18}dic.setdefault('height', 165) # 没有height这个键,则增加键值对print(dic) # {'name': 'pamela', 'age': 18, 'height': 165}dic.setdefault('name', 'apple') # 有name这个键,则不变print(dic) # {'name': 'pamela', 'age': 18, 'height': 165}# 有返回值dic = {'name': 'pamela', 'age': 18}ret1 = dic.setdefault('height', 165)print(ret1) # 165ret2 = dic.setdefault('name', 'apple')print(ret2) # pamela
(左右滑动查看完整代码)
2.删
'''pop 通过key删除字典的键值对有返回值,返回值为删除的键值对中的value可给字典中不存在的key设置返回值,不设置通过pop删除会报错'''dic = {'name': 'pamela', 'age': 18}ret = dic.pop('name')print(ret) # pamelaprint(dic) # {'age': 18}# 设置返回值dic1 = {'name': 'pamela', 'age': 18}ret1 = dic1.pop('n', None) # 给字典中不存在的key设置返回值,不设置执行会报错print(ret1, dic1) # None {'name': '太白', 'age': 18}ret2 = dic1.pop('age', 10) # 给字典中存在的key设置返回值,没有任何意义print(ret2, dic1) # 18 {'name': 'pamela'}
(左右滑动查看完整代码)
'''popitem 删除最后一个键值对(python3.6版本之前,popitem为随机删除)有返回值,返回值为删除的键值对'''dic = {'name': 'pamela', 'age': 18}ret = dic.popitem()print(ret) # ('age', 18)print(dic) # {'name': 'pamela'}
(左右滑动查看完整代码)
'''clear 清空字典'''dic = {'name': 'pamela', 'age': 18}dic.clear()print(dic) # {}
(左右滑动查看完整代码)
'''del:通过key删除字典的键值对,删除字典中不存在的key会报错删除整个字典'''dic = {'name': 'pamela', 'age': 18}del dic['name'] # 通过键删除键值对print(dic) # {'age': 18}del dic # #删除整个字典print(dic) # NameError: name 'dic' is not defined
(左右滑动查看完整代码)
3.改
'''通过键值对直接改:有此key,就修改key对应的value没有此key,就增加键值对'''dic = {'name': 'pamela', 'age': 18}dic['name'] = 'apple' # 有name这个key,就修改key对应的valueprint(dic) # {'name': 'apple', 'age': 18}dic['height'] = 165 # 没有height这个key,就成了增加键值对print(dic) # {'name': 'apple', 'age': 18, 'height': 165}
(左右滑动查看完整代码)
'''update 修改原字典中的数据有此key,就修改key对应的value没有此key,就增加键值对'''dic = {'name': 'pamela', 'age': 18}dic.update(sex='女', height=165)print(dic) # {'name': 'pamela', 'age': 18, 'sex': '女', 'height': 165}dic1 = {'name': 'pamela', 'age': 18}dic1.update([(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')])print(dic1) # {'name': 'pamela', 'age': 18, 1: 'a', 2: 'b', 3: 'c', 4: 'd'}dic3 = {"name": "pamela", "age": 18, "sex": "女"}dic4 = {"name": "apple", "weight": 75}dic3.update(dic4)print(dic3) # {'name': 'apple', 'age': 18, 'sex': '女', 'weight': 75}print(dic4) # {'name': 'apple', 'weight': 75}
(左右滑动查看完整代码)
4.查
'''通过key查询对应的value,查询字典中不存在的key会报错'''dic = {'name': 'pamela', 'age': 18}print(dic['name']) # pamela
(左右滑动查看完整代码)
'''get 通过key查询对应的value可给字典中不存在的key设置返回值,不设置就返回None'''dic = {'name': 'pamela', 'age': 18}print(dic.get('name')) # 'pamela'print(dic.get('name1')) # Noneprint(dic.get('name2', '没有此键')) # 没有此键
(左右滑动查看完整代码)
'''keys 获取字典所有的key一个高仿列表,可以通过list()转化成列表,也可以直接循环打印'''dic = {'name': 'pamela', 'age': 18}key_list = dic.keys()print(key_list) # dict_keys(['name', 'age'])# 一个高仿列表,存放的都是字典中的key# 这个高仿列表可以通过list()转化成列表print(list(key_list)) # ['name', 'age']# 这个高仿列表可以直接循环打印for i in dic.keys():print(i) # name age
(左右滑动查看完整代码)
'''values 获取字典所有的value一个高仿列表,可以通过list()转化成列表'''dic = {'name': 'pamela', 'age': 18}value_list = dic.values()print(value_list) # dict_values(['pamela', 18])# 一个高仿列表,存放的都是字典中的value# 这个高仿列表可以通过list()转化成列表print(list(value_list)) # ['pamela', 18]# 这个高仿列表可以直接循环打印for i in dic.values():print(i) # pamela 18
(左右滑动查看完整代码)
'''items 获取字典所有的键值对一个高仿列表,可以通过list()转化成列表,列表中是多个元组'''dic = {'name': 'pamela', 'age': 18}key_value_list = dic.items()print(key_value_list) # dict_items([('name', 'pamela'), ('age', 18)])# 一个高仿列表,存放的是多个元祖,元祖中第一个是字典中的key,第二个是字典中的value# 这个高仿列表可以通过list()转化成列表print(list(key_value_list)) # [('name', 'pamela'), ('age', 18)]# 这个高仿列表可以直接循环打印for i in dic.items():print(i) # ('name', 'pamela') ('age', 18)
(左右滑动查看完整代码)
'''for循环查询'''dic = {'name': 'pamela', 'age': 18}for i in dic:'''直接循环字典,默认打印字典的key'''print(i) # name agefor i in dic.keys():'''循环打印字典的key'''print(i) # name agefor i in dic.values():'''循环打印字典的value'''print(i) # pamela 18for i in dic.items():'''循环打印字典的键值对(元组形式)'''print(i) # ('name', 'pamela') ('age', 18)
(左右滑动查看完整代码)
'''拆包(分别赋值)'''a, b = 1, 2print(a, b) # 1 2a, b = ('pamela','123') # 元组的拆包print(a, b) # pamela 123a, b = ['pamela','123']print(a, b) # pamela 123a, b = {'name': 'pamela', 'age': 18}print(a, b) # name age'''通过拆包循环获取字典的key和value'''dic = {'name': 'pamela', 'age': 18}for k, v in dic.items():print('这是键', k)print('这是值', v)
(左右滑动查看完整代码)
字典的嵌套
dic = {'name': ['pamela', 2, 3, 5],'job': 'test','study': {'pamela': ['python', 'selenium', 100]}}# 将name对应的列表追加⼀个元素’apple’。dic['name'].append('apple')print(dic) # {'name': ['pamela', 2, 3, 5, 'apple'], 'job': 'test', 'study': {'pamela': ['python', 'selenium', 100]}}# 将name对应的列表中的pamela⾸字⺟⼤写。dic['name'][0] = dic['name'][0].capitalize()print(dic) # {'name': ['Pamela', 2, 3, 5, 'apple'], 'job': 'test', 'study': {'pamela': ['python', 'selenium', 100]}}# 将study对应的字典加⼀个键值对’apple’,’linux’。dic['study']['apple'] = 'linux'print(dic) # {'name': ['Pamela', 2, 3, 5, 'apple'], 'job': 'test', 'study': {'pamela': ['python', 'selenium', 100], 'apple': 'linux'}}# 将study对应的字典中的pamela对应的列表中的selenium删除dic['study']['pamela'].remove('selenium')print(dic) # {'name': ['Pamela', 2, 3, 5, 'apple'], 'job': 'test', 'study': {'pamela': ['python', 100], 'apple': 'linux'}}
(左右滑动查看完整代码)
集合(set)
集合是无序的,不重复的数据集合,它里面的元素必须是不可变的(int,str,bool,tuplel),但是集合本身是可变的。
集合最重要的两点:
去重:把一个列表变成集合,就自动去重了。
关系测试:测试两组数据之间的交集、差集、并集等关系。

(点击查看大图)
集合的创建
'''方式一'''set1 = set() # 创建空集合print(set1) # set()set2 = set({1, 2, 'pamela', True})print(set2) # {1, 2, 'pamela', True}'''方式二'''set3 = {1, 2, 'pamela', False}print(set3) # {1, 2, 'pamela', False}
(左右滑动查看完整代码)
集合的增删
1.增
'''add 增加指定的元素'''set1 = {'pamela', 'apple', 'test', 123}set1.add('abc')print(set1) # {'pamela', 'abc', 'test', 'apple', 123}
(左右滑动查看完整代码)
'''update 迭代着增加'''set1 = {'pamela', 'apple', 'test', 123}set1.update('A')print(set1) # {'apple', 'pamela', 'A', 'test', 123}set1.update('中文')print(set1) # {'apple', 'pamela', 'A', '文', '中', 'test', 123}set1.update([1, 2, 3])print(set1) # {1, 2, 'apple', 3, 'pamela', 'A', '文', '中', 'test', 123}
(左右滑动查看完整代码)
2.删
'''remove 删除指定的元素'''set1 = {'pamela', 'apple', 'test', 123}set1.remove('pamela')print(set1) # {'apple', 123, 'test'}
(左右滑动查看完整代码)
'''pop 随机删除一个元素'''set1 = {'pamela', 'apple', 'test', 123}set1.pop()print(set1) # {123, 'pamela', 'test'}
(左右滑动查看完整代码)
'''clear 清空集合'''set1 = {'pamela', 'apple', 'test', 123}set1.clear()print(set1) # set()
(左右滑动查看完整代码)
'''del 删除集合'''set1 = {'pamela', 'apple', 'test', 123}del set1print(set1) # NameError: name 'set1' is not defined
(左右滑动查看完整代码)
3.变相改值:集合是无序的,所以不能查询和直接改值,但是可以间接改值,先删除再增加。
set1 = {'pamela', 'apple', 'test', 123}set1.remove('pamela') # 先删除set1.add('abc') # 再增加print(set1) # {'abc', 123, 'test', 'apple'}
集合的其他操作
(关系测试)
'''交集(& 或 intersection)'''set1 = {1, 2, 3, 4, 5}set2 = {4, 5, 6, 7, 8}print(set1 & set2) # {4, 5}print(set1.intersection(set2)) # {4, 5}
(左右滑动查看完整代码)
'''并集(| 或 union)'''set1 = {1, 2, 3, 4, 5}set2 = {4, 5, 6, 7, 8}print(set1 | set2) # {1, 2, 3, 4, 5, 6, 7,8}print(set2.union(set1)) # {1, 2, 3, 4, 5, 6, 7,8}
(左右滑动查看完整代码)
'''差集(- 或 difference)'''set1 = {1, 2, 3, 4, 5}set2 = {4, 5, 6, 7, 8}print(set1 - set2) # {1, 2, 3}print(set1.difference(set2)) # {1, 2, 3}
(左右滑动查看完整代码)
'''反交集 (^ 或 symmetric_difference)'''set1 = {1, 2, 3, 4, 5}set2 = {4, 5, 6, 7, 8}print(set1 ^ set2) # {1, 2, 3, 6, 7, 8}print(set1.symmetric_difference(set2)) # {1, 2, 3, 6, 7, 8}
(左右滑动查看完整代码)
'''子集 (< 或 issubset)'''set1 = {1, 2, 3}set2 = {1, 2, 3, 4, 5, 6}print(set1 < set2) # True,set1是set2子集print(set1.issubset(set2)) # True,set1是set2子集
(左右滑动查看完整代码)
'''超集 (> 或 issuperset)'''set1 = {1, 2, 3}set2 = {1, 2, 3, 4, 5, 6}print(set2 > set1) # True,set2是set1超集print(set2.issuperset(set1)) # True,set2是set1超集
(左右滑动查看完整代码)
'''frozenset 不可变集合,让集合变成不可变类型'''s = frozenset('pamela')print(s) # frozenset({'l', 'p', 'm', 'e', 'a'})print(type(s)) # <class 'frozenset'>
(左右滑动查看完整代码)
列表的去重
把一个列表变成集合,就自动去重了,但是不能保持原列表的顺序。
li = [1, 1, 6, 2, 2, 5, 3, 3, 4, 4]li_set = set(li)print(li_set) # {1, 2, 3, 4, 5, 6}li2 = list(li_set)print(li2) # [1, 2, 3, 4, 5, 6]
(左右滑动查看完整代码)



![[Python基础] 2018年最新Python3数据科学入门与实战视频教程+代码讲义 8章](https://static.kouhao8.com/sucaidashi/xkbb/03b77b9ef3563422128ce04d404e3b08.png?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)





![[Python] Python 3 视频 高级运维 Django 基础进阶高级 项目实战全新教](https://static.kouhao8.com/sucaidashi/xkbb/5ecc7b88e610fb14a592598c781e3659.png?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)








![[Python] 老外的编程Python3基础教程视频20章节87个视频[全英文]](https://static.kouhao8.com/sucaidashi/xkbb/74c6656eb86170babccf92a253b272e6.jpg?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)







![[Python基础] 小甲鱼零基础入门Python学习视频+全套源码课件 Python视频教程 96讲](https://static.kouhao8.com/sucaidashi/xkbb/d7970e7abb546e6cbe9a4c45b030ed51.jpg?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)

![[Python] 零基础入门Python数据分析师到项目实战 多个网易真实案例实战 进阶算法学习视频](https://static.kouhao8.com/sucaidashi/xkbb/ab3d2c0ae37f1b2a7858a9b9daa86d6b.jpg?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)
相关资源