python之字典

it2022-05-05  101

字典

字典字典取值操作字典函数字典方法扩展思考

字典

字典是另一种可变容器类型,可存储任意类型对象。语法结构:字典名={key1:value1,key2:value2}—键值对 my_dict1 = {1001:'老张',1002:'老王',1003:'老李'} print('值为:',my_dict1,'类型为:',type(my_dict1))

列表和字典的区别:

列表元素进行修改的话,通过索引进行修改,如果当前元素的顺序发生改变,此时还需要修改索引才能成功完成元素的修改。字典既能存储多个数据,又能很方便准确的定位元素。

字典的核心特性:

字典使用{},因为json使用{},{}表示键值对的写法,传输数据效率极快关键字 dict通过键取值,键不可重复,值可以重复。与Java中的map相同。键key和数据库的id主键原理一样字典的键可以是任意不可变的对象(int,str,bool,tuple…)但一般都用strMap<Integer,string> map = new Map<Integer,string>

字典取值操作

# dict['']取值 my_dict2 = {'name':'tom', 'age':'18', 'gender':'man' } # 规范,可读性 print('取一个值:',my_dict2['name']) print('取多个值:',my_dict2['name'],my_dict2['age']) # 使用不存在的键,报错 print('不存在的键',my_dict2['sex']) # KeyError: ---空指针 # get方法取值 print('get方法有值:', my_dict2.get('name')) # 有值 print('get方法无值:', my_dict2.get('name1')) # 无值 none----企业大量使用该方法

总结:

key-value的情况下,企业优先使用key获取值,不适用index索引键定义为str类型键获取值的原理:Mapping映射关系

字典函数

# 定义字典 person1 = {'1001': 'TonyTeacher','1002': 'LaoWang','1003': 'FengSister'} person2 = {'1001':"Dog",'1002':'Cat'} print('person1的字典值为:',person1) print('person2的字典值为:',person2) print('person1的字典Type为:',type(person1)) print('person2的字典Type为:',type(person2)) print('person1的字典len为:',len(person1)) print('person2的字典len为:',len(person2)) # 源码快捷键 ctrl+左键点击要查看的函数名,可以查看对应函数的底层代码 str() 通过str表示将元素的值按照字符串输出 # str()通过str表示将元素的值按照字符串输出 person3 = {'name': "Dog", 'age': '3', 'gender': 'man', 18: 19} result2 = str(person3) print('此时person3的类型为:', type(person3)) print('person3的值为', result2) """ 思考:获取person3值的方法: get index key 切片 - 通过str可以将[] {}内的值一次性输出,并且不需要类型转换 - str不仅表示一个字符串还表示一个函数一个方法 """ dict.fromkeys(seq) 表示将字典、元组里面的值当键输出。seq表示一个对象或者参数 。 # dict.fromkeys(seq) seq表示一个对象或者参数 fromkeys(seq)表示将字典、元组里面的值当键输出 seq = ('name', 'age', 'sex') result3 = dict.fromkeys(seq) print('result3的值为:', result3) result4 = dict.fromkeys(seq,'jack') print('result4的值为:', result4) # dict.fromkeys(seq)能否输出值呢? # 结果:None seq2 = {'name':'dog', 'age':12, 'sex':'man'} result5 = dict.fromkeys(seq2) print('result5的值为:', result5) key in dict 如果键在字典里面则返回true,否则返回false。 # key in dict 如果键在字典里面则返回true,否则返回false seq3={'name':['tom','jack'],'age':18,'sex':'男',18:19} if 'name' in seq3: print("键name在字典中存在") else: print("键name在字典中不存在") dict.keys() 以列表返回一个字典所有的键。 # dict.keys() 以列表返回一个字典所有的键 seq4={'name':['tom','jack'],'age':18,'sex':'男',18:19} print(seq4.keys()) dict.values() 以列表返回一个字典中的所有值。 # dict.values() 以列表返回一个字典中的所有值 dict1={'name':'tom','age':18} print(dict1.values()) my_dict3 = {'name':'tom', 'age':'18', 'gender':'man', 'name2':'tony', }# 规范 my_dict3['name2'] = 'tonyTeacher' # key存在,覆盖原来的值 my_dict3['name3'] = 'bobTeacher' # key不存在,新生成一条数据 setdefault() 定义key-value,若存在不改变,不存在新生成。 # setdefault()定义key-value,若存在不改变,不存在新生成。 result = my_dict3.setdefault('birthday',1998) print('result值:',result) update()更新key—value,若都有不改变,若有新则更新。 # update()更新key—value,若都有不改变,若有新则更新。 a = {'1':1,'2':2,'3':3} b = {'4':4,'5':5,'1':1} print('更新前的a:',a) a.update(b) print('更新后的a:',a)

字典方法扩展

del 删除 既可以删除指定的字典元素(列表也可以指定),也可以删除整个字典,如果不指定key,代表删除整个字典。 # del 删除,既可以删除指定的字典元素(列表也可以指定),也可以删除整个字典,如果不指定key,代表删除整个字典。 d={'name':'tom','age':18} del d['name'] # 删除指定的字典元素 print('删除后的:',d) del d # 删除整个字典 print('删除后的:',d) clear()清空字典 用来清空字典,被清空的字典最后会剩下一个空的字典在,而用del删除的字典在程序当中就不存在了。 # clear()用来清空字典,被清空的字典最后会剩下一个空的字典在,而用del删除的字典在程序当中就不存在了。 d1={'name':'tom','age':18} d1.clear() print('清空后:',d) pop() 根据key删除字典中的key-value # pop() 根据key删除字典中的key-value d2={'name':'tom','age':18} d2.pop('name') # 会将被删除的value返回! # 如果删除不存在的key,会抛出异常 d2.pop('name1') # 如果指定了默认值,再删除不存在的key时,不会报错,而是直接返回默认值

思考

假设函数没有(),效率如何? 在企业工作中受用()函数式元组赋值,不建议使用省略(),影响数据的性能问题

计算机语言的括号适用原则:

([ ]){[ ],[ ]}“’ '”

keys底层实现原理----可以一次性查询所有键,为什么?

D.keys() -> a set-like object providing a view on D’s keys "key底层其实就是一个实现like函数的查询方法,但like查询效率太低like不可以满足查询海量数据的操作

面试必问: like有几种用法?like的缺点。

用法: select name from emp like name = ‘% 王%’ select name from emp like name = ‘王%’ select name from emp like name = '%王’ select name from emp like name = ‘_王’ select name from emp like name = ‘%’ !现已禁用!缺点: like查询数据会产生缓存。 like在操作数据时会将数据切片。数据可能不是很完整。

为什么python的key也用str? 因为服务器永远是字符串类型,胶水语言


最新回复(0)