Python学习-字典(dict)

作者: 残阳夕露 | 来源:发表于2018-07-11 01:31 被阅读31次
    查看所有Python相关学习笔记

    字典(dict)

    字典内元素是无序的

    新增(创建)字典(key-value)

    key 可以是字符串/整型/浮点型

    • 空字典-动态分配键值
    dict1 = {}
    dict1[1] = 3 # 如果这个键已存在,则会修改该键对应的值
    dict1[2] = '3'
    dict1['2'] = 3
    dict1[3.12] = '哈哈'
    print(dict1)
    # 执行结果
    {1: 3, 2: '3', '2': 3, 3.12: '哈哈'}
    
    • 传统文字表达式 key-values
    dict2 = {1:3,2:'3','2':3,3.12:'哈哈'}
    print(dict2)
    # 执行结果
    {1: 3, 2: '3', '2': 3, 3.12: '哈哈'}
    
    • 字典键值元组表
    dict3 = dict(((1,3),(2,'3'),('2',3),(3.12,'哈哈')))
    print(dict3)
    # 执行结果
    {1: 3, 2: '3', '2': 3, 3.12: '哈哈'}
    
    • 字典键值表键必须都是字符串才行,否则会报错

      键值必须为字符串,但不需要加引号

    # 正确方法
    dict4 = dict(dd=3,ddsaa=4)
    print(dict4)
    # 执行结果
    {'dd': 3, 'ddsaa': 4}
    
    # 错误方法
    dict4 = dict(1=3,2='3','2'=3,3.12='哈哈')
    print(dict4)
    dict5 = dict('dd'=3,'ddsaa'=4)
    print(dict5)
    # 执行结果
    SyntaxError: keyword can't be an expression
    
    
    • 所有键的值都相同或者赋予初始值-fromkeys方法

      第一个参数为列表或元组,第二个参数是值,如果第二个参数没有,则所有键的值是None

    dict1= dict.fromkeys((1,2,3))
    print(dict1)
    # 执行结果
    {1: None, 2: None, 3: None}
    
    dict2 = dict.fromkeys(('ee','dd'),'number')
    print(dict2)
    # 执行结果
    {'ee': 'number', 'dd': 'number'}
    
    dict3 = dict.fromkeys((1,2,3),('number',1,2))
    print(dict3)
    # 执行结果
    {1: ('number', 1, 2), 2: ('number', 1, 2), 3: ('number', 1, 2)}
    

    取值

    • 方式一:字典名[key]
    dict2 =  {'name':'jack','age':40}
    print(dict2['age'])
    # 执行结果
    40
    
    • 方式二:get方法取值

    如果查不到则返归指定的值

    dict2 =  {'name':'jack','age':40}
    print(dict2.get('age',10))
    print(dict2.get('age1',10) 
    # 执行结果
    40
    10
    
    • 方式三:setdefault方法
    1. 如果字典中存在,则返回对应的值,原字典不变。
    dict1= dict.fromkeys((1,2,3),'值') # 新建字典
    print(f'原字典:{dict1}')
    c = dict1.setdefault(1,6)#key = 1 存在
    print(f'set对应的值:{c}')
    print(f'set后的字典:{dict1}')
    # 执行结果
    set对应的值:值
    set后的字典:{1: '值', 2: '值', 3: '值', 5: None, 6: 6}
    
    1. 如果字典中不存在,则新增一个键,对应的值为第二个参数(第二参数如果没有,对应的值就为None)
    dict1= dict.fromkeys((1,2,3),'值') # 新建字典
    print(f'原字典:{dict1}')
    a = dict1.setdefault(5)#key = 5 不存在
    print(f'set对应的值:{a}') 
    print(f'set后的字典:{dict1}')
    b = dict1.setdefault(6,6)#key = 6 不存在
    print(f'set对应的值:{b}')
    print(f'set后的字典:{dict1}')
    # 执行结果
    原字典:{1: '值', 2: '值', 3: '值'}
    set对应的值:None
    set后的字典:{1: '值', 2: '值', 3: '值', 5: None}
    set对应的值:6
    set后的字典:{1: '值', 2: '值', 3: '值', 5: None, 6: 6}
    
    
    1. 应用:如果不存在则新增一个,value是一个list,如果已存在则在列表中加一个元素
    dict1 = {}
    dict1.setdefault('a',[]).append(1)
    dict1.setdefault('cc',[]).append(2)
    dict1.setdefault('a',[]).append(3)
    print(dict1)
    # 执行结果
    {'a': [1, 3], 'cc': [2]}
    
    
    • 方式四:for循环取字典里的值
    for key in dict #取出key
    for key,value in dict.items() #取出key和value
    for key in dict.keys() #取出key
    for value in dict.values()#取出value
    
    • 方法五:取最大值和最小值对应的key(仅能获取一个key)
    >>> d  = {1:1, 2:0, 3:2}
    >>> d
    {1: 1, 2: 0, 3: 2}
    >>> min(d,key = d.get)
    2
    >>> max(d,key = d.get)
    3
    
    

    修改数据

    • 单个修改
    from pprint import pprint
    d = {1:1,2:2,3:3}
    d[1] = 11111 # 如果该键不存在,则新增该键值
    pprint(d)
    # 执行结果
    {1: 11111, 2: 2, 3: 3}
    
    • 批量修改:增加另一个dict的内容&或批量修改字典内容
    from pprint import pprint
    d = {1:1,2:2,3:3}
    d.update({4:4,5:5})  # 批量新增
    pprint(d)
    d.update({2:33})  #批量修改
    pprint(d)
    # 执行结果
    {1: 1, 2: 2, 3: 3, 4: 4, 5: 5}
    {1: 1, 2: 33, 3: 3, 4: 4, 5: 5}
    

    复制字典

    • copy方法指向不同地址

      修改其中一个字典,不会影响另一个

    dict1= dict.fromkeys((1,2,3)) # 新建字典
    print(dict1)
    print(id(dict1))
    dict2 = dict1.copy()  #copy字典
    print(dict2)
    print(id(dict2))
    # 执行结果
    {1: None, 2: None, 3: None}
    4363826304
    {1: None, 2: None, 3: None}
    4362426336
    
    
    • 赋值方法指向同一地址

      修改其中一个字典,另一个同时也被修改

    dict1= dict.fromkeys((1,2,3)) # 新建字典
    print(dict1)
    print(id(dict1))
    dict3 = dict1  #赋值
    print(dict3)
    print(id(dict3))
    # 执行结果
    {1: None, 2: None, 3: None}
    4363826376
    {1: None, 2: None, 3: None}
    4363826376
    

    删除

    • 弹出指定键对应的值pop(key)
    dict1= dict.fromkeys((1,2,3),'值') # 新建字典
    print(f'原字典:{dict1}')
    a = dict1.pop(1)
    print(f'弹出的值:{a}')
    print(f'弹出后的字典:{dict1}')
    # 执行结果
    原字典:{1: '值', 2: '值', 3: '值'}
    弹出的值:值
    弹出后的字典:{2: '值', 3: '值'}
    
    • 随机弹出键值对popitem()
    dict1= dict.fromkeys((1,2,3),'值') # 新建字典
    print(f'原字典:{dict1}')
    a = dict1.popitem()
    print(f'弹出的值:{a}')
    print(f'弹出后的字典:{dict1}')
    # 执行结果
    原字典:{1: '值', 2: '值', 3: '值'}
    弹出的值:(3, '值')
    弹出后的字典:{1: '值', 2: '值'}
    

    清空字典

    • 方法一:dict.clear()
      • 清空字典,原地址不变
      dict2 = {1:1,2:2}
      print(id(dict2))
      dict2 .clear()
      print(id(dict2))
      print(f'clear后:{dict2}')
      # 执行结果
      4538208
      4538208
      clear后:{}
      
      • 清空字典定义清空字典的函数时,此方法有效
      def test(dict0):
        dict0.clear()
        print(f'函数内:{id(dict0)}')
      dict1 = {1:1,2:2}
      print(f'函数调用前的id:{id(dict1)}')
      test(dict1)
      print(f'函数调用后的id:{id(dict1)}')
      print(f'clear后:{dict1}')
      
      # 执行结果
      函数调用前的id:6111072
      函数内:6111072
      函数调用后的id:6111072
      clear后:{}  
      
    • 方法二:dict = {}

      • 清空字典,地址已改变(相当于给原字典变量重新赋值了一个空的新字典)
      dict2 = {1:1,2:2}
      print(id(dict2))
      dict2 = {}
      print(id(dict2))
      print(f'{{}}后:{dict2}')
      # 执行结果
      33963872
      33963920
      {}后:{}
      
      • 清空字典定义清空字典的函数并调用该函数时,此方法无效
      def test(dict0):
        dict0 = {}
        print(f'函数内:{id(dict0)}')
      dict1 = {1:1,2:2}
      print(f'函数调用前的id:{id(dict1)}')
      test(dict1)
      print(f'函数调用后的id:{id(dict1)}')
      print(f'{{}}后:{dict1}')
      
      # 执行结果
      函数调用前的id:5980000
      函数内:6021360
      函数调用后的id:5980000
      {}后:{1: 1, 2: 2}
      

    相关文章

      网友评论

        本文标题:Python学习-字典(dict)

        本文链接:https://www.haomeiwen.com/subject/wbjcpftx.html