Dsh007 python基础编程--元组、字典和集合

    科技2022-07-12  115

    1、元组简介

    元组简介 元组表现形式tuple元组是⼀个不可变序列使⽤()创建元素元组不是空元组⾄少有⼀个逗号(,) 当元组不是空元组时括号可以省略元组解包指将元组当中的每⼀个元素都赋值给⼀个变量 什么情况下用列表?什么时候用元组? 一般情况下,希望数据不改变就用元组,其他情况下统统用列表 my_tuple = 12,23,34,45 print(my_tuple) # 输出结果为:(12, 23, 34, 45) a,b,c,d = my_tuple print(a,b,c,d) # 输出结果为:12 23 34 45 a,b,*c = my_tuple print('a = ',a) # 输出结果为:a = 12 print('b = ',b) # 输出结果为:b = 23 print('c = ',c) # 输出结果为:c = [34,45] my_tuple = 12,23,34,45 a,*b,c = my_tuple print('a = ',a) # 输出结果为:a = 12 print('b = ',b) # 输出结果为:b = [23,34] print('c = ',c) # 输出结果为:c = 45

    2、字典

    2.1 字典的简介

    字典属于⼀种新的数据结构称为映射(mapping)字典和列表都可以⽤来存储数据对象列表存储数据的性能好,但是查询数据的性能差,字典正好与之相反在字典中每⼀个元素都有唯⼀的名字,通过这个唯⼀的名字可以找到指定的 元素这个唯⼀的名字我们称之为key 通过key可以快速查询value 也可以称之为值字典我们也称之为键值对(key-value)结构每个字典中都可以有多个键值对,⽽每⼀个键值对我们称其为⼀项(item)创建⼀个有数据的字典 语法 {key:value}字典的值可以是任意对象 字典的键可以是任意的不可变对象(int str bool tuple…)字典的键是不能重复的,如果出现重复的后⾯的会替换前⾯的字典可以多行编写 d = {'name':'葫芦娃','age':'9','gender':'male','name':'葫芦妹'} print(d,type(d)) # 输出结果为:{'name': '葫芦妹', 'age': '9', 'gender': 'male'} <class 'dict'> print(d['name'],d['gender']) # 输出结果为:葫芦妹 male

    2.2 字典的使用

    dict()函数来创建字典 创建字典,也可以将一个包含双值子序列的序列转换为字典双值序列,序列当中包含两个值[4,5],(5,6),‘ab’子序列,序列当中元素也是序列,称其为双值子序列[(1,2,3),[4,5]]len() 键值对的个数 get(key[,default]) 根据键来获取字典的值。第⼆个参数可以指定⼀个默认值,当获取不到值的时候会返回默认值in 检查字典中是否包含有指定的键,not in检查字典中是否不包含指定的键 d = dict(name='葫芦娃',age=7,gender='male') # print(d) # 输出结果为:{'name': '葫芦娃', 'age': 7, 'gender': 'male'} d1 = dict([('name','绿灯侠'),('age',20)]) print(d1) # 输出结果为:{'name': '绿灯侠', 'age': 20} print(len(d1)) # 输出结果为:2 print(d1.get('name')) # 输出结果为:绿灯侠 print('绿巨人'in d1) # 输出结果为:False print('绿巨人'not in d1) # 输出结果为:True d = {'name':'葫芦娃','age':'9','gender':'male','name':'葫芦妹'} d['name'] = '葫芦娃他妹' # 修改字典中的value d['phone'] = '54188' # 如果字典中没有key,可以向字典中添加key-value print(d) # 输出结果为:{'name': '高老师', 'age': '9', 'gender': 'male', 'phone': '54188'} setdefault(key, default)可以向字典中添加key-value 如果字典中的key值已经存在了,不会对字典有任何操作如果字典中的key值不存在,则向这个字典中添加这个key并设置value d = {'name':'葫芦娃','age':'9','gender':'male'} d.setdefault('name','python') print(d) # 输出结果为:{'name': '葫芦娃', 'age': '9', 'gender': 'male'} d.setdefault('name1','hello') print(d) # 输出结果为:{'name': '葫芦娃', 'age': '9', 'gender': 'male', 'name1': 'hello'} update() 将其他字典的key-value添加到当前的字典当中,如果有重复的key,后边的会覆盖前边的 d = {'a':1,'b':2,'c':3} d1 = {'e':1,'f':21,'g':31} d.update(d1) print(d) # 输出结果为:{'a': 1, 'b': 2, 'c': 3, 'e': 1, 'f': 21, 'g': 31} print(d1) # 输出结果为:{'e': 1, 'f': 21, 'g': 31} del 删除字典中的key-valuepopitem() 随机删除字典中的一个key-value ,一般删除字典最后的⼀个key-value,这个⽅法有返回值。删除之 后它会将删除的key-value作为返回值返回。返回值是一个元组,有两个元素,第一个元素是删除掉的key,第二个元素是删除的valuepop(key[,default]) 根据key删除字典中的value。第⼆个参数可以指定⼀个 默认值,当获取不到值的时候会返回默认值 d = {'a': 1, 'b': 2, 'c': 3, 'e': 1, 'f': 21, 'g': 31} del d['a'] print(d) # 输出结果为:{'b': 2, 'c': 3, 'e': 1, 'f': 21, 'g': 31} r = d.popitem() print(d) # 输出结果为:{'b': 2, 'c': 3, 'e': 1, 'f': 21} print(r) # 输出结果为:('g', 31) r = d.pop('e') print(r) # 输出结果为:1 clear()清空字典 d = {'a':1,'b':2,'c':3} d.clear() print(d) # 输出结果为:{}

    2.3 copy()

    copy() 该⽅法⽤来对字典进⾏浅复制,也可用于列表注意:浅复制只会复制字典本身,如果字典中还有个字典是不会进⾏复制的 d = {'a':1,'b':2,'c':3} d1 = d.copy() print(d,id(d)) # 输出结果为:{'a': 1, 'b': 2, 'c': 3} 2022761782872 print(d1,id(d1)) # 输出结果为:{'a': 1, 'b': 2, 'c': 3} 2022761782944 deepcopy()深复制 import copy d = {'a':{'name':'天空战记'},'b':2,'c':3} d1 = copy.deepcopy(d) d1['a']['name'] = '圣斗士星矢' print(d,id(d)) # 输出结果为:{'a': {'name': '天空战记'}, 'b': 2, 'c': 3} 2014922788936 print(d1,id(d1)) # 输出结果为:{'a': {'name': '圣斗士星矢'}, 'b': 2, 'c': 3} 2014923607208

    3、遍历字典

    我们主要可以通过3种⽅式对字典进⾏遍历

    keys() 该⽅法返回字典所有的keyvalues() 该⽅法返回⼀个序列 序列中保存有字典的值items() 该⽅法会返回字典中所有的项 它返回⼀个序列,序列中包含有双值 ⼦序列 双值分别是 字典中的key和value d = {'name':'葫芦娃','age':'9','gender':'male'} print(d.keys()) # 输出结果:dict_keys(['name', 'age', 'gender']) for i in d.keys(): print(d[i]) # 输出结果:葫芦娃 9 male d = {'name':'葫芦娃','age':'9','gender':'male'} for v in d.values(): print(v) # 输出结果:葫芦娃 9 male d = {'name':'葫芦娃','age':'9','gender':'male'} print(d.items()) # 输出结果:dict_items([('name', '葫芦娃'), ('age', '9'), ('gender', 'male')]) for k,v in d.items(): print(k) print(v) # 输出结果:name 葫芦娃 age 9 gender male

    4、集合

    4.1 集合简介

    集合表现形式set 集合和列表⾮常相似不同点 集合只能存储不可变对象,包括整数、元组集合中存储的对象是⽆序的(不是按照元素的插入顺序来保存的)集合不能出现重复元素 使⽤{ }来创建集合,没有元素的{ }是字典 s = {100,10,1,2,3,4,1,2,3,4} print(s,type(s)) # 输出结果:{1, 2, 3, 100, 4, 10} <class 'set'> 可以通过set()来将序列和字典转换成集合 s = set([1,2,3,4,5]) print(s,type(s)) # 输出结果:{1, 2, 3, 4, 5} <class 'set'> s = set('hello') print(s,type(s)) # 输出结果:{'e', 'l', 'h', 'o'} <class 'set'> s = {'a','b','c',1,2,3} print(s,type(s)) # 输出结果:{1, 2, 3, 'c', 'a', 'b'} <class 'set'> lst = list(s) print(lst) add( )向集合中添加元素 s = {'a','b','c',1,2,3} s.add('e') s.add(5) print(s) update()将⼀个集合中的元素添加到另⼀个集合当中 s = {'a','b','c',1,2,3} s1 = set('good') s.update(s1) print(s) # 输出结果:{1, 2, 3, 'o', 'd', 'g', 'c', 'b', 'a'} print(s1) # 输出结果:{'o', 'd', 'g'} pop()随机删除集合中的一个元素remove()删除集合中指定的元素clear()清空集合 s = {'a','b','c',1,2,3} r = s.pop() print(s) # 输出结果:{2, 'c', 3, 'b', 'a'} s.remove(3) print(s) # 输出结果:{2, 'c', 'b', 'a'} s.clear() print(s) # 输出结果:set()

    4.2 集合的运算

    & 交集运算| 并集运算–差集运算^ 亦或集 s1 = {1,2,3,4,5} s2 = {3,4,5,6,7} r1 = s1 & s2 r2 = s1 | s2 r3 = s1 - s2 r4 = s1 ^ s2 print(r1) # 输出结果:{3, 4, 5} print(r2) # 输出结果:{1, 2, 3, 4, 5, 6, 7} print(r3) # 输出结果:{1, 2} print(r4) # 输出结果:{1, 2, 6, 7} (<=) 检查⼀个集合是否是另⼀个集合的⼦集(<) 检查⼀个集合是否是另⼀个集合的真⼦集(>=) 检查⼀个集合是否是另⼀个集合的超集(>) 检查⼀个集合是否是另⼀个集合的真超集 a = {1,2,3} b = {1,2,3,4,5} r1 = a <= b r2 = b >= a print(r1) # 输出结果:True print(r2) # 输出结果:True

    5、练习

    练习1

    a = {“name”:“123”,“data”:{“result”:[{“src”:“python1”}, {“src”:“python2”},{“src”:“python3”}]}} 找到 python1/python2/python3

    a = {"name":"123","data":{"result":[{"src":"python1"},{"src":"python2"},{"src":"python3"}]}} b = a['data']['result'] # c = b['result'] for i in b: print(i['src'])

    练习2

    有如下值集合[11,22,33,44,55,66,77,88,99,90], 将所有⼤于66的值保存 ⾄字典的第⼀个key中,将⼩于66值保存⾄第⼆个key的值中

    lst = [11,22,33,44,55,66,77,88,99,90] dic = {} n = [] m = [] for i in lst: if i > 66: n.append(i) if i < 66: m.append(i) dic.update(s1 = m,s2 = n) print(dic) 输出结果为:{'s1': [11, 22, 33, 44, 55], 's2': [77, 88, 99, 90]}
    Processed: 0.012, SQL: 8