设为首页 收藏本站
查看: 1381|回复: 0

[经验分享] Python3.5修炼手册10-duyuheng

[复制链接]

尚未签到

发表于 2018-8-13 13:03:41 | 显示全部楼层 |阅读模式
  字典
  
  字典的使用
  在python中对字典进行了构造,让我们可以轻松的查到某个特定的键(类似拼音或笔画索引),从而通过键找到对应的值(类似具体某个字)。
  创建和使用字典
  字典的创建格式如下
  a={key1:value1,key2:value2}
  空字典的创建
  b={}
  注意:在创建字典的的时候键(key)必须唯一的,但值(value)不必。值可以取任何数据类型,键必须是不可变的,如字符串、数字或元组。
  dict函数
  dict函数 可以通过其他映射(如其他字典)或键/值序列对建立字典。
  例如:
student=[('name','杜宇恒'),('number','666')]  
detai=dict(student)
  
print('学生详细信息:',detai)
  
print('学生姓名:',detai['name'])
  
print('学生学号:',detai['number'])
  C:\python\python.exe C:/python.py/zidian.py
  学生详细信息: {'name': '杜宇恒', 'number': '666'}
  学生姓名: 杜宇恒
  学生学号: 666
  上例可以看到dict函数可以就爱那个序列转换为字典
  dict函数还可以通过关键字创建字典。
  例如:
detail = dict(name='杜宇恒',number='666')  
print('学生的详细信息:',detail)
  C:\python\python.exe C:/python.py/zidian.py
  学生的详细信息: {'name': '杜宇恒', 'number': '666'}
  通过关键字创建字典是dict函数非常有用的一个功能。
  字典的基本操作
  字典的基本操作在很多方面与序列(sequence)类似,支持删除修改等操作。
  修改字典
  向字典添加新内容的方法是是增加新键/值对,修改或删除已有键/值对,修改或删除已有键/值。
  例如:
student={'杜宇恒':'666','徐伟':'777','高爽':'888'}  
#更新徐伟的学号
  
student['徐伟']='999'
  
print('徐伟的学号是:%(徐伟)s'%student)
  
#添加一个新的学生
  
student['杜兆利']='1000'
  
print('杜兆利的学号是:%(杜兆利)s'%student)
  
print('所有学生的信息:',student)
  C:\python\python.exe C:/python.py/zidian.py
  徐伟的学号是:999
  杜兆利的学号是:1000
  所有学生的信息: {'杜兆利': '1000', '徐伟': '999', '杜宇恒': '666', '高爽': '888'}
  删除字典元素
  此处的删除指的是显示删除,显示删除一个字典用del命令
  例如:
student={'杜宇恒':'666','徐伟':'777','高爽':'888','杜兆利':'999'}  
print('删除之前:',student)
  
#删除高爽
  
del student['高爽']
  
print('删除之后:',student)
  C:\python\python.exe C:/python.py/zidian.py
  删除之前: {'杜宇恒': '666', '杜兆利': '999', '高爽': '888', '徐伟': '777'}
  删除之后: {'杜宇恒': '666', '杜兆利': '999', '徐伟': '777'}
  除了删除键还可以删除整个字典
  例如:
student={'杜宇恒':'666','徐伟':'777','高爽':'888','杜兆利':'999'}  
del student
  
print('删除整个字典之后:',student)
  C:\python\python.exe C:/python.py/zidian.py
  Traceback (most recent call last):
  File "C:/python.py/zidian.py", line 8, in <module>
  print('删除整个字典之后:',student)
  NameError: name 'student' is not defined
  报错:student没有定义
  由上例可以看出删除字典之后就不能字典进行访问了,执行del操作后字典就不存在了
  字典键的特性
  ①键必须是不可遍的,可以用数字,字符串或元组充当,不能用列表
  ②字典值可以没有限制的取任何pytho对象,既可以是标准对象,也可以是用户自定义对象,但键不行。
  例如:
student={'杜宇恒':'666','徐伟':'777','高爽':'888','杜宇恒':'999'}  
print(student)
  C:\python\python.exe C:/python.py/zidian.py
  {'杜宇恒': '999', '徐伟': '777', '高爽': '888'}
  一个键被赋值两次之后,后面的值会被记住
  len函数
  len函数用于计算字典元素的个数,即键的总数
  例如:
student={'杜宇恒':'666','徐伟':'777','高爽':'888','杜兆利':'999'}  
print('字典中元素的个数为:%d个'%len(student))
  C:\python\python.exe C:/python.py/zidian.py
  字典中元素的个数为:4个
  type函数
  type(variable)函数返回输入的变量类型,如果输入变量的是字典就返回字典
  例如:
student={'杜宇恒':'666','徐伟':'777','高爽':'888','杜兆利':'999'}  
print('student的类型为:',type (student))
  C:\python\python.exe C:/python.py/zidian.py
  student的类型为: <class 'dict'>
  字典的格式化字符串
  字典的格式化方式是在每转换说明符中的%字符后加上圆括号括起来的键,在跟上其他说明元素。
  例如:
student={'杜宇恒':'666','徐伟':'777','高爽':'888','杜兆利':'999'}  
print('徐伟的学号是:%(徐伟)s'%student)
  C:\python\python.exe C:/python.py/zidian.py
  徐伟的学号是:777
  字典的格式化除了增加字符串外,转换说明符还像以前一样工作。以这种方式使用字典时,只要给出的键都能在字典中找到,就可以获得任意数量的转换说明符
  字典和列表的区别
  字典(dict)的特点是:
  查找和插入的速度极快,不会随着key的增加而变慢。
  需要占用大量内存,内存浪费多。
  列表(list)的特点是:
  查找和插入时间随着元素的增加而增加。
  占用空间小,浪费内存少
  注意:dict内部存放的顺序和键放入的顺序是没有关系的。
  字典方法
  clera()方法
  clera()方法用于删除字典内的所有项。
  clera()方法语法如下:
  dict.clear()
  dict代表字典,不需要参数。该函数是一个原地操作(类似于list.sort)函数,没有任何返回值(返回值为None)
  clera()方法演示:
student={'杜宇恒':'666','徐伟':'777','高爽':'888','杜兆利':'999'}  
print('student字典中的元素为:%d个'%len(student))
  
student.clear()
  
print('student字典删除元素后的个数为:%d个'%len(student))
  C:\python\python.exe C:/python.py/zidian.py
  student字典中的元素为:4个
  student字典删除元素后的个数为:0
  字典调用clear方法后整个字典内所在的所有项都被删除。
  copy方法
  copy方法返回一个具有相同键/值对的新字典。这个方法是浅复制(shallow copy),因为值本身是相同的,而不是副本。
  copy方法语法如下:
  dict.copy()
  dct代表字典,不需要参数。返回结果为一个字典的浅复制
  copy方法演示:
student={'杜宇恒':'666','徐伟':'777','高爽':'888','杜兆利':'999'}  
st=student.copy()
  
print('复制后得到的st为:',st)
  C:\python\python.exe C:/python.py/zidian.py
  复制后得到的st为: {'杜兆利': '999', '杜宇恒': '666', '徐伟': '777', '高爽': '888'}
  什么是浅复制?
  示例:
student = {'小智':'1002','info':['小张','1006','man']}  
st=student.copy()
  
st['小智'] = '1005'
  
print('更改copy后的st为:',st)
  
print('原字符串为:',student)
  
st['info'].remove('man')
  
print('删除后st为:',st)
  
print('删除后student为:',student)
  C:\python\python.exe C:/python.py/zidian.py
  更改copy后的st为: {'info': ['小张', '1006', 'man'], '小智': '1005'}
  原字符串为: {'info': ['小张', '1006', 'man'], '小智': '1002'}
  删除后st为: {'info': ['小张', '1006'], '小智': '1005'}
  删除后student为: {'info': ['小张', '1006'], '小智': '1002'}
  从上例可以出,替换副本的值时原始字典不受影响。如果修改了某个值(原地修改,不是替换),原始字典就会改变,因为同样的值也原字典中以这样方式进行复制就是浅复制,使用深复制就可以避免该问题。
  什么是深复制?
  示例:
#深复制需要调用copy模块  
import  copy
  
student = {'小智':'1002','info':['小张','1006','man']}
  
st=copy.deepcopy(student)
  
st['小智'] = '1005'
  
print('更改copy后的st为:',st)
  
print('原字符串为:',student)
  
st['info'].remove('man')
  
print('删除后st为:',st)
  
print('删除后student为:',student)
  C:\python\python.exe C:/python.py/zidian.py
  更改copy后的st为: {'小智': '1005', 'info': ['小张', '1006', 'man']}
  原字符串为: {'小智': '1002', 'info': ['小张', '1006', 'man']}
  删除后st为: {'小智': '1005', 'info': ['小张', '1006']}
  删除后student为: {'小智': '1002', 'info': ['小张', '1006', 'man']}
  深复制,包含对象里面的自对象的复制,所以原始对象的改变不会造成深复制里任何子元素的改变
  fromkeys()方法
  fromkeys()方法用于创建一个新字典,以序列seq中的元素做字典的键,value为字典所有键对应的初始值
  fromkeys()方法语法如下:
  dict.fromkeys(seq[,value])
  dict代表指定字典;eq代表字典键值列表;value代表可选参数,设置键序列(seq)。该方法返回结果为字典。
  fromkeys()方法演示:
seq=('name','age','sex')  
info = dict.fromkeys(seq)
  
print('新的字典为:%s'% info)
  
info =dict.fromkeys(seq,10)
  
print('赋值后的字典为:%s'%info)
  C:\python\python.exe C:/python.py/zidian.py
  新的字典为:{'name': None, 'sex': None, 'age': None}
  赋值后的字典为:{'name': 10, 'sex': 10, 'age': 10}
  fromkeys()方法使用给定位的键建立新字典,每个键默认对应的值为None。
  get()方法
  get()方法返回指定的键值,如果值不字典中,就返回默认值。
  get()方法语法如下:
  dict.get(key,default=None)
  dict代表指定字典;key 代表字典中要查找的键,default代表指定键值不存在时默认值。该方法返回结果为指定的键值,如果值不在字典中,就返回默认值None。
  get()方法演示:
student={'杜宇恒':'666','徐伟':'777','高爽':'888','杜兆利':'999'}  
print('高爽的学号为:%s'% student.get('高爽'))
  
#访问一个不存在的键值
  
print('柴兴旺的学号为:%s'% student.get('柴兴旺'))
  C:\python\python.exe C:/python.py/zidian.py
  高爽的学号为:888
  柴兴旺的学号为:None
  使用get方法访问一个不存在的键时,返回None。可以自定义默认值,用于替换None。
  例如:
student={'杜宇恒':'666','徐伟':'777','高爽':'888','杜兆利':'999'}  
#访问一个不存在的 键值时将默认返回值None替换为自定的值
  
print('柴兴旺的学号为:%s'% student.get('柴兴旺','此人不存在!!!'))
  C:\python\python.exe C:/python.py/zidian.py
  柴兴旺的学号为:此人不存在!!
  从上例可以看出'此人不存在!!!'代替了None
  key in dict()方法
  key in dict()方法python字典in操作符用于判断键是否存在于字典中,如果键在字典dict中就返回true,否则就返回false。
  key in dict()方法语法如下:
  key in dict
  dict代表指定字典;key代表要在字典中查找的键。如果键在字典dict中就返回true,否则就返回false。
key in dict()方法演示:  
student={'杜宇恒':'666','徐伟':'777','高爽':'888','杜兆利':'999'}
  
print('杜宇恒在student字典中吗?%s'%('杜宇恒'in student))
  
print('柴兴旺在student字典中吗?%s'%('柴兴旺在'in student))
  C:\python\python.exe C:/python.py/zidian.py
  杜宇恒在student字典中吗?True
  柴兴旺在student字典中吗?False
  注意:在python2中有一个相同功能的方法has_key方法,has_key方法的使用方式和in不同。
  items()方法
  items()方法以列表返回可遍历的(键,值)元组数组。
  items()方法语法如下:
  dict.items()
  dict代表指定字典;不需要参数。返回结果为可遍历的(键/值)元组数组。
  items()方法演示:
student={'杜宇恒':'666','徐伟':'777'}  
print('调用items方法的结果:%s'%student.items())
  C:\python\python.exe C:/python.py/zidian.py
  调用items方法的结果:dict_items([('杜宇恒', '666'), ('徐伟', '777')])
  上例可以看出返回结果为一个元组组数。
  注意:在python2中提供了一个iteritems方法,和items方法的作用大致相同,但是iteritems方法返回的是一个迭代器对象,而不是列表。在python3没有iteritems方法
  keys()方法
  keys()方法以列表返回一个字典的所有键。
  keys()方法语法如下;
  dict.keys()
  dict代表指定字典;不需要参数。返回结果为一个字典的所有键。
  keys()方法演示:
student={'杜宇恒':'666','徐伟':'777'}  
print("student字典中的所有键为:%s"%student.keys())
  C:\python\python.exe C:/python.py/zidian.py
  student字典中的所有键为:dict_keys(['杜宇恒', '徐伟'])
  上例可以看出返回的是一个元组数,数组中包含字典所有键。
  setdefault()方法
  setdefault()方法和get()方法类似,用于获得与给定键相关联的值。如果键不存在于字典中,就会添加键并将值设为默认值。
  setdefault()方法语法如下:
  dict.setdefault(key.default=None)
  dict代表指定字典;key代表查找的键值,default代表不存在时设置的默认键值。该方法没有任何返回值。
  setdefault()方法演示:
student={'杜宇恒':'666','徐伟':'777'}  
print('高爽的键值为:%s'%student.setdefault('高爽'))
  
print('徐伟的键值为:%s'%student.setdefault('徐伟'))
  
print('student字典的型值为:%s'%student)
  C:\python\python.exe C:/python.py/zidian.py
  高爽的键值为:None
  徐伟的键值为:777
  student字典的型值为:{'徐伟': '777', '高爽': None, '杜宇恒': '666'}
  上例可以看出,当键不存在时,setdefault()方法返回默认值并更新字典;如果键存在就返回对应的值,不改变字典。
  使用setdefault()访问一个不存在的键值时,如果不设定就使用None,如果设定就使用设定的值。
  例如:
student={'杜宇恒':'666','徐伟':'777'}  
print('高爽的键值为:%s'%student.setdefault('高爽'))
  C:\python\python.exe C:/python.py/zidian.py
  高爽的键值为:None
student={'杜宇恒':'666','徐伟':'777'}  
print('高爽的键值为:%s'%student.setdefault('高爽','888'))
  
print(student)
  C:\python\python.exe C:/python.py/zidian.py
  高爽的键值为:888
  {'高爽': '888', '杜宇恒': '666', '徐伟': '777'}
  上列可以看出使用默认值时输出结果为None;设定了键值后便输出了所设定的键值,并且更新了字典。
  update方法()方法
  update方法()方法用于把字典dict2的键值/值对更新到dict里
  update方法()方法语法如下:
  dict.update(dict2)
  dict代表指定字典;dict2代表添加到指定字典dict里的字典。该方法没有任何返回值。
  update方法()方法演示:
student={'杜宇恒':'666','徐伟':'777'}  
student2={'高爽':'888'}
  
print('原student字典为:%s'%student)
  
student.update(student2)
  
print('新student字典为:%s'%student)
  
#对相同项覆盖
  
student3={'高爽':'1010'}
  
student.update(student3)
  
print('覆盖后的新student字典为:%s'%student)
  C:\python\python.exe C:/python.py/zidian.py
  原student字典为:{'杜宇恒': '666', '徐伟': '777'}
  新student字典为:{'杜宇恒': '666', '徐伟': '777', '高爽': '888'}
  覆盖后的新student字典为:{'杜宇恒': '666', '徐伟': '777', '高爽': '1010'}
  由上例可以看出,提供的字典中的项被添加到旧字典中,如果有相同键就会覆盖。
  values()方法
  values()方法以列表形式返回字典中所有值,与返回键的列表不同,返回列表中可以包含重复的元素。
  values()方法语法如下:
  dict.values()
  dict代表指定字典;不需要参数。返回结果为字典中的所有值。
  values()方法演示:
student={'杜宇恒':'666','徐伟':'777','高爽':'666'}  
print("student字典所有的值为:%s"%list(student.values()))
  C:\python\python.exe C:/python.py/zidian.py
  student字典所有的值为:['666', '666', '888']
  上例可以看出,返回的列表中包含重复的元素。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-551219-1-1.html 上篇帖子: Python3.5修炼手册9-duyuheng 下篇帖子:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表