• 七丶Python字典


    创建字典

    什么是字典

    • 字典就是用于保存具有映射关系的数据,字典相当于保存两组数据,其中一组是关键数据,成为key;另一组数据可以通过key来访问,被称为value
    • 特性: 字典中每一个key对应一个value,每一个key都不能相同,但是value可以多个相等

    创建字典

    1. 花括号法:花括号应包含多组key-value对,key-value之间用英文的冒号隔开;多组key-value对之间使用英文逗号隔开
     #字典中key和value一一对应,key都是独一无二的不可以相同,value可以多个相同
    scores = {'语文':89,'数学':78,'英语':95,'地理':78}
    print(scores)
    
    1. dict构造器:可以传入多个列表或元组参数作为key-value对;也可以为dict指定关键字参数创建字典,此时字典的key不允许使用表达式
    #使用dict创建字典时,列表/序列中的每个元素必须包含两个子元素如下,如若子元素个数不为2,则字典创建失败,返回'ValueError: dictionary update sequence element #3 has length 3; 2 is required'
    dicta = dict([('小学',7),('初中',13),('高中',16),('大学',19)])
    print(dicta)
    
    #使用关键字参数创建字典(dict)时,不能使用表达式
    dictb = dict(小学=7,初中=13,高中=16,大学=19)
    print(dictb)
    
    1. 字典的key是不可变的,因此列表不能作为dict的key

    操作字典key-value对

    • 使用方括号和key来访问key对应的value值
    #字典中通过key访问value
    dictb = dict(小学=7,初中=13,高中=16,大学=19)
    print(dictb['高中'])
    
    • 当对不存在的key赋value值时,相当于给字典添加字典元素
    #字典元素的添加
    dictb = dict(小学=7,初中=13,高中=16,大学=19)
    dictb['社会实践'] = 'forever'
    print(dictb)
    
    • 当对已存在的key赋value值时,相当于替换字典中对应key的value值
    #字典元素替换
    dictb = dict(小学=7,初中=13,高中=16,大学=19)
    dictb['高中'] = 'forever'
    print(dictb)
    
    • 删除key-value对
    #字典元素的删除
    dictb = dict(小学=7,初中=13,高中=16,大学=19)
    del dictb['高中']
    print(dictb)
    
    • 将指定的key赋值为None时不能删除key-value对
    #字典元素的删除
    dictb = dict(小学=7,初中=13,高中=16,大学=19)
    del dictb['高中']
    dictb['大学'] = None
    print(dictb)
    del dictb['大学']
    print(dictb)
    #我这里赋值为None后依然可以被删除,有点疑惑这是为什么,大佬可以评论告诉我,谢谢!
    
    • 使用in、not in判断dict是否包含指定的key
    #使用in 、not in判断元素是否再字典内
    dictb = dict(小学=7,初中=13,高中=16,大学=19)
    print('小学' in dictb)		#返回True 说明'小学'在dictb中
    print('初中' not in dictb)	##返回False 说明'小学'在dictb中
    

    理解dict和list的关系

    • 字典相当于索引,是任意不可变类型的列表,而列表相当于key只能是整数的字典;如果程序中要使用字典的key都是整数类型,则可以考虑是不是要换成列表
    • 列表的索引总是从0开始,也不需要连续。因此列表不允许对不存在的索引赋值;但字典则允许直接对不存在的key赋值,这样就会直接给字典新增了一对key-value值

    # 总结:
    字典(dict)和列表(list)都是可变的,都可以对内部元素进行增加、删除、修改的操作
    但是因为字典的key是不可变的,所以列表(list)不能直接赋值于key

    字典用法的进阶

    字典的常用方法

    • dir(dict) 查看字典所支持的方法
    • clear() 用于清空字典的所有key-value对
     #clear()清空字典内所有key-value,被清空的字典就是一个空字典返回'{}'
    scores = {'语文':89,'数学':78,'英语':95,'地理':78}
    scores.clear()
    print(scores)
    
    • get() 方法其实就是根据key来获取value
     #get()根据key来获取value值
    scores = {'语文':89,'数学':78,'英语':95,'地理':78}
    print(scores.get('数学'))
    
    • update()方法可使一个字典所包含的key-value对来更新另一个已有的字典.
     #使用update()方法,用一个新的字典去更新另一个已有的字典
    scores = {'语文':89,'数学':78,'英语':95,'地理':78}
    scores_a = {'语文':90,'数学':98,'生物':76}
    scores_b = [('历史',98),('自然',75),('Python',100)]
    scores_c = dict(彭同学=88,雷同学=79,李同学=90)   #注意使用关键字定义字典时,括号内不允许有表达式(key不需要引号)
    scores.update(scores_a)
    print(scores)
    #更新目标.update(使用对象)
    scores_a.update(scores_b)
    print(scores_a)
    #若字典使用序列作为参数,此时序列的每个元素必须包含两个子元素,第一个是key,第二个是value
    scores_temp = dict(scores_b)    #先将列表转为字典
    scores_temp.update(scores_c)    #再使用scores_c,来更新这个转化好的字典
    print(scores_temp)
    #注意使用关键字定义字典时,括号内不允许有表达式(key不需要引号)
    
    • iteme()、keys()、value()分别用于获取字典中所有的key-value、所有的key、所有的value
    #使用items()、keys()、values()分别遍历字典中的所有元素(每个元素包含一个key,一个value)、遍历字典中的所有key(只遍历key)、遍历所有value(只遍历value)
    scores = {'语文':89,'数学':78,'英语':95,'地理':78}
    for key in scores.keys():
        print(key)
        
    for value in scores.values():
        print(value)
        
    for item in scores.items():	#liems这里面使用到了序列的解包
        print(item)
    
    • pop() 方法用于获取、并删除指定key对应的value
    #使用pop()方法获取并删除key对应的value(删除并返回key对应的value值)
    scores = {'语文':89,'数学':78,'英语':95,'地理':78}
    return1 = scores.pop('地理')
    print(scores)
    print(return1)
    
    • popitem()方法用于随机地弹出字典中一个key-value对
    • setdefault()方法也用与根据key来获取对应value的值,并为不存在的key设置默认值(创建字典的地三种方法)
    #使用setdefault()方法获取对应key的value值,如果key不存在,则添加一个key到字典中并设置value为None
    scores = {'语文':89,'数学':78,'英语':95,'地理':78}
    a = scores.setdefault('数学')
    print(a)
    scores.setdefault('生物')
    print(scores)
    
    • fromkeys() 方法可将序列转化为字典,可以给转化的字典设置一个固定的value值
    #使用formkeys()转化序列为字典
    d = dict.fromkeys(['RNG','IG','BLG','LNG'],35) 	#dict.fromkeys(序列,value默认值) = newscores
    print(d)
    

    使用字典对字符串格式化

    • 在字符串模板中按key指定变量,然后通过字典为字符串模板中的key设置值
    #使用字典格式化字符串
    str1 ="今年是%4.0f年""我在学习%s"
    print(str1%(2019,'Python'))     #普通的格式化字符串
    str2 = "今年是%(nian)4.0f年""我在学习%(name)s"  #字典格式化字符串
    print(str2 % {'nian':2019,'name':'Python'})
    
    总结: 两种字符格式化原理其时是一样的,不同的时第一种是根据字符的先后位置来填充字符串;而字典格式化字符串则是根据设置好的key来指定对应的value
  • 相关阅读:
    [C#] 主窗口嵌入子窗口(绑架窗口)
    【WP7】后台加载数据BackgroundWorker
    【WP7】手势操作与拨号键盘
    【算法】拼音匹配算法(支持多音字)
    【笔记】歌词显示问题
    【笔记】使用千千静听服务器下载歌词
    【WP7】代码创建png图片
    【WP7】自定义字体
    【WP7】对象序列化
    【WP7】控件倾斜特效
  • 原文地址:https://www.cnblogs.com/mlcg/p/11285175.html
Copyright © 2020-2023  润新知