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]) # 456
print(dic[True]) # 999
print(dic['id']) # 1
print(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) # 165
ret2 = dic.setdefault('name', 'apple')
print(ret2) # pamela
(左右滑动查看完整代码)
2.删
'''
pop 通过key删除字典的键值对
有返回值,返回值为删除的键值对中的value
可给字典中不存在的key设置返回值,不设置通过pop删除会报错
'''
dic = {'name': 'pamela', 'age': 18}
ret = dic.pop('name')
print(ret) # pamela
print(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对应的value
print(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')) # None
print(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 age
for i in dic.keys():
'''循环打印字典的key'''
print(i) # name age
for i in dic.values():
'''循环打印字典的value'''
print(i) # pamela 18
for i in dic.items():
'''循环打印字典的键值对(元组形式)'''
print(i) # ('name', 'pamela') ('age', 18)
(左右滑动查看完整代码)
'''
拆包(分别赋值)
'''
a, b = 1, 2
print(a, b) # 1 2
a, b = ('pamela','123') # 元组的拆包
print(a, b) # pamela 123
a, b = ['pamela','123']
print(a, b) # pamela 123
a, 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 set1
print(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]
(左右滑动查看完整代码)
相关资源