Python学习第三天之字典

柳三千

文章最后更新时间: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)
文章版权声明:除非注明,否则均为柳三千运维录原创文章,转载或复制请以超链接形式并注明出处。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码