基础数据类型之字典

字典

1,定义

  • 列表可以存储大量的数据类型,但是只能按照顺序存储,数据与数据之间关联性不强。
    所以咱们需要引入一种容器型的数据类型,解决上面的问题,这就需要dict字典。
    字典(dict)是python中唯⼀的⼀个映射类型.他是以{ }括起来的键值对组成。
    在dict中key是 唯⼀的.在保存的时候, 根据key来计算出⼀个内存地址. 然后将key-value保存在这个地址中.
    这种算法被称为hash算法, 所以, 切记, 在dict中存储的key-value中的key必须是可hash的
    可以改变的都是不可哈希的, 那么可哈希就意味着不可变. 这个是为了能准确的计算内存地址⽽规定的.
    
    • 字典是无序的,可变的,
    • 用于储存数据,储存大量数据,
    • 字典要比列表快,可以将数据和数据之间进行关联
    • 英文dict 简写 dic,使用大括号{}
    • 字典中逗号(,)分隔每一个元素

2,字典的键对值

  • 语法:{'key1':1,'key2':2}, 'key':键,1:值
    
  • 字典的’键‘:

    • 可哈希的——不可变的数据类型(int, str, tuple, bool),避免哈希冲突,使用了开放寻址法
      不可哈希 的——可变的数据类型( list, dict, set)
      要求唯一  : ——如果有重复的,后边的值将前边的值覆盖
      
  • 字典的值:

    • 可以任意
      

字典的方法

1,字典的增

  • 如果dict 中没有出现这个key,就会将key-value组合添加到这个字典中

  • 没有就添加,有就改键的值

  • dic = {}
    dic['david'] = 1992
    print(dic)
    result
    {'david':1992}
    
  • 如果dict中没有出现过这个key-value,可通过setdefault设置默认值

  • 使用setdefault这个方法,里边放的这个内容是我们字典的键,添加到字典的值就是一个none

  • 当setdefault中第一个参数存在这个字典中就不进行添加

  • dic= {}
    a = dic.setdefault('科比')
    print(a)
    print(dic)
    result
    None
    {'科比': None}
    

2,字典的删

  • dic.pop()

  • 通过字典的键进行删除键对值

  • 删除有返回值,返回的是被删除的值,没有键

  • dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
    s = dic.pop('詹姆士')
    print(s)
    print(dic)
    result
    23
    {'科比': 24, '艾弗森': 3, '韦德': 3, '麦迪': 1}
    
  • dic.popitem()

  • 随机删除

  • dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
    s=dic.popitem()
    print(s)
    print(dic)
    result
    ('麦迪', 1)
    {'科比': 24, '詹姆士': 23, '艾弗森': 3, '韦德': 3}
    
  • clear():清空

    • dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
      dic.clear()
      print(dic)
      result
      {}
      
      
  • del

    • del dic['key']:通过字典的键删除键对值

    • dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
      del dic['詹姆士']
      print(dic)
      result
      {'科比': 24, '艾弗森': 3, '韦德': 3, '麦迪': 1}
      
      
    • 删除字典

    • dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
      del dic
      print(dic)
      result
      报错NameError: name 'dic' is not defined
      
      

3,字典的改

  • 键在字典中存在的时候就是修改键对应的值

    • dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
      dic['詹姆士'] = 8
      print(dic)
      result
      {'科比': 24, '詹姆士': 8, '艾弗森': 3, '韦德': 3, '麦迪': 1}
      
      
  • 字典中没有键对值的时候就是添加,添加到字典的末尾

    • dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
      dic['乔丹'] = 23
      print(dic)
      result
      {'科比': 24, '詹姆士': 23, '艾弗森': 3, '韦德': 3, '麦迪': 1, '乔丹': 23}
      
      
  • update(dic)

    • update括号中的字典级别高于update前面的字典

    • 当update中的字典没有dic中的键对值,就添加到dic中,

    • dic.updaate(dic1)
      程序从左向右运行,即字典dic1添加到字典dic的末尾,且print(dic)。
      
      
    • dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
      dic1={'乔丹':23}
      dic.update(dic1)
      print(dic)
      result
      {'科比': 24, '詹姆士': 23, '艾弗森': 3, '韦德': 3, '麦迪': 1, '乔丹': 23}
      
      

4,字典的查

  • for循环

    • dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
      for i in dic:
      	print(i)   #循环获取都是字典中每个键值对应的键
      result
      科比
      詹姆士
      艾弗森
      韦德
      麦迪
      
      
  • dic[key]:通过键来查,结果是键的值;如果键不在字典中,就会报错

    • dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
      dic1 = dic['科比']
      print(dic1)
      result
      24
      
      
    • dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
      dic1 = dic['乔丹']
      print(dic1)
      result
      报错:KeyError: '乔丹'
      
      
  • dic.get(key):通过键来查看,结果是键的值

    • dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
      dic1 = dic.get('艾弗森')
      print(dic1)
      result
      3
      
      
    • 当字典中没有这个键,显示None

    • dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
      dic1 = dic.get('乔丹')
      print(dic1)
      result
      None
      
      
    • dic.get.(key,"内容"):我们可以在get查找的时候自己定义返回的结果

    • dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
      dic1 = dic.get('艾弗森',"忠艾一生")
      print(dic1)
      3
      
      
  • dic.setdefault(key),查询,none,则添加,有则可修改,可不添加

其他操作

  • 获取所有的键(keys)

    • dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
      for i in dic.keys():
      	print(i)
      result
      科比
      詹姆士
      艾弗森
      韦德
      麦迪
      
      
    • key_list = dic.keys()
      
      
  • 获取所有的值

    • dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
      for i in dic.values():
      	print(i)
      result
      24
      23
      3
      3
      1
      
      
    • values_list = dic.values()
      
      
  • 获取所有的键对值

    • dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
      for k,v in dic.items():
      	print(k,v)
      result
      科比 24
      詹姆士 23
      艾弗森 3
      韦德 3
      麦迪 1
      
      
    • keys_values_list = dic.items()
      
      
    • dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
      for i in dic.items():   #items获取的键对值是元祖
          print(i)
      result
      ('科比', 24)
      ('詹姆士', 23)
      ('艾弗森', 3)
      ('韦德', 3)
      ('麦迪', 1)
      
      
  • 高仿列表

    • dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
      for i in dic:
      	print(i,dic.get(i))
      result
      科比 24
      詹姆士 23
      艾弗森 3
      韦德 3
      麦迪 1
      
      
    • dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1}
      print(dic.keys())
      result
      dict_keys(['科比', '詹姆士', '艾弗森', '韦德', '麦迪'])#高仿列表
      
      

解构

  • a,b = 1,2
    print(a,b)
    结果:
    1 2
    
    a,b = ('你好','世界')
    print(a,b)
    结果:
    你好 世界
    
    
    a,b = {'汪峰':'北京北京','王菲':'天后'}
    print(a,b)
    结果:
    汪峰 王菲
    
    

字典的嵌套

  • dic = {
        'name':'汪峰',
        'age':48,
        'wife':[{'name':'国际章','age':38}],
        'children':['第一个熊孩子','第二个熊孩子']
        }
    
    获取汪峰的妻子名字
    d1 = dic['wife'][0]['name']
    print(d1)
    获取汪峰的孩子们
    d2 = dic['children']
    print(d2)
    获取汪峰的第一个孩子
    d3 = dic['children'][0]
    print(d3)
    
    

布尔值

  • True :非零整数
  • False:零
  • None,0,空(空字符串,空列表,空字典等)三种情况下布尔值为False
  • 其余均为真
posted @ 2019-12-13 09:34  阿浪阿浪  阅读(220)  评论(0编辑  收藏  举报