文章最后更新时间:2023年04月14日已超过595天没有更新。
前言:
Python中能通过键找到对应的值,这就是字典!类似于“哈希”、“散列”、“映射”,其实都是一个东西跟另一个东西的对应关系;通过一个东西,可以找到另一个东西。
创建字典
#创建一个空字典 emptyDict = dict() emptyDict2 = {} print("Length:",len(emptyDict)) print("Length:",len(emptyDict2))
查看字典的值
dict1 = {'ip':'192.168.23.12','host':'web','port':80,'version':'19,0'} print(dict1) print(dict1['host']) #字典的嵌套 dev = { 'r1': { 'vendor': 'Cisco', 'model': '4451', 'ip': '192.168.11.51' }, 'sw1': { 'vendor': 'Huawei', 'model': 'S5700', 'ip': '192.168.11.151' } } print (dev['r1']['vendor']) print (dev['r1']['ip']) #格式化打印 from pprint import pprint dict1 = {'Vendor':'HUAWEI','Model':'Quidway S5328C-EI','Ports':24,'Version':'VRP (R) Software, Version 5.150 (V200R005C00SPC500)'} print(dict1)#不适合人眼观看 pprint(dict1)#格式化打印
新增字典的值
student={'小米':86,"张三":69,"许刚不许刚":59} print(student) student['小明']=99 student['小红']='99' print(student)
更改字典的值
student['小红']=96 print(student)
清空字典的值
student={'小米':86,"张三":69,"许刚不许刚":59} print(student) student.clear() print(student) #删除指定的键值 del student['小米'] print (student)
拷贝字典
''' 用赋值形式大拷贝,此时等于是拿多一块“标签”,往要拷贝的对象(值)一贴完事, 这个时候,这两个标签指向的对象(值)是同一个。 对其中一个字典修改,则另一个字典值也会跟着修改! ''' student={'小米':86,"张三":69,"许刚不许刚":59} student2 = student print(student2) #id值一样 print(id(student)) print(id(student2)) #修改其中字典一个值,两个字典都会跟着变化 student['李四']=29 print(student) print(student2)
#方法copy() 对比上面,看看区别 student={'小米':86,"张三":69,"许刚不许刚":59} student2 = student.copy() print(student2) #id值不一样 print(id(student)) print(id(student2)) #修改其中字典一个值,另外一个字典不会有影响 student['李四']=29 print(student) print(student2)
student={'小米':86,"张三":69,"许刚不许刚":[66,38,29]} student2 = student.copy() print(student2) #id值不一样 print(id(student)) print(id(student2)) #仔细看好了 student['许刚不许刚'][1]=99 print(student) #student2也跟着变了 print(student2) ''' 这里涉及到深浅拷贝的内容, 原因是方法copy()虽然给student2指定了一个对象, 但里面的不同的(值)又其实指向了内存中同一个列表位置! 可参考《Python 直接赋值、浅拷贝和深度拷贝解析》 知道大概有这一回事就好了,用到的时候深入研究 ''' #ID值一样 print(id(student['许刚不许刚'][1])) print(id(student2['许刚不许刚'][1]))
索引 get()、setdefault()
如果我们通过中括号键名的方式进行索引的话,如果该不存在该键,则会报错!程序中途报错如果不做处理的话,会中断执行,比较麻烦。此时如果我们用方法get(),如果字典没有对应的键名,则会返回None,而非报错。
student={'小米':86,"张三":69,"许刚不许刚":[66,38,29]} student2 = student.copy() print(student2['刘霸天'])#报错 KeyError: '刘霸天' print(student2.get('刘霸天'))#返回值 None
除了方法get(),我们有时候也用方法setdefault()。它的作用是如果没找到键名对应的值,则直接新建一个。
student={'小米':86,"张三":69,"许刚不许刚":[66,38,29]} print (student.setdefault('小米')) print (student.setdefault('刘霸天'))#返回值None,并且给刘霸天设置了None值 #手动指定默认值 print(student.setdefault('刘小二','998')) print(student)
字典返回值
dev = {'vendor': 'Huawei', 'model': 'S5700', 'ip': '192.168.11.151', 'version': None, 'local': 'shantou'} print(dev.keys())#keys() 返回键 print(dev.values())#values() 返回值 print(dev.items())#返回键值对
dict.fromkeys
我们经常用这个方法来建一个字典模板,里面只有键,值为空。这类似于excel表我们只做了表头;又类似于我们在数据库中新建了一个空表,把字段都设置好了
sw1_keys = ['vendor','model','local','ports'] sw1 = dict.fromkeys(sw1_keys) print(sw1) #默认值是None,修改默认值 from pprint import pprint sw1_keys = ['vendor','model','local','ports'] sw1 = dict.fromkeys(sw1_keys, 'wgsy_none') pprint(sw1)
字典生成式
items=['Fruits','Books','Others'] prices=[98,76,89] lst=zip(items,prices)#将对象应用中的元素打包一个元组,返回由这些元组组成的列表 #print(list(lst)) d = { item : price for item,price in lst } print(d)
文章版权声明:除非注明,否则均为柳三千运维录原创文章,转载或复制请以超链接形式并注明出处。