美文网首页
【Python基础】10. 字典

【Python基础】10. 字典

作者: 古月半半 | 来源:发表于2018-09-21 19:52 被阅读0次

    本篇笔记知识点:

    • 字典基本概念
    • 字典键(key)的特性
    • 字典的创建
    • 字典的增删改查

    字典的基本概念

    • 字典一种key - value 的数据类型
    • Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。
    • Python字典可存储任意类型对象,如字符串、数字、元组、列表…… 优点:取值方便,速度快
    • 每个键与其值使用一个冒号(key:value; key:value; .......)分开,这些键-值对是使用逗号分隔的,整个字典项目用大括号括起来。
    • 空字典: 没有任何项目的空字典只用两个花括号写成:{}
    • 键在字典中是唯一的,而值可以不必是唯一的。字典的值可以是任何类型的,但是键必须是不可变的数据类型,例如字符串,数字或元组。

    字典键的特性

    字典值可以没有限制地取任何python对象,既可以是标准的对象,也可以是用户定义的,但键不行。
    两个重要的点需要记住:

    1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住,如下实例:
    dict1 = {'Name': 'Zara', 'Age': 7, 'Name': 'Manni'};
    print ("dict1['Name']: ", dict1['Name'])
    

    输出结果:dict1['Name']: Manni

    2)键必须不可变,所以可以用数,字符串或元组充当,所以用列表就不行,如下实例:
    dict1 = {['Name']: 'Zara', 'Age': 7};
    print ("dict1['Name']: ", dict1['Name'])
    

    输出结果:dict1 = {['Name']: 'Zara', 'Age': 7}; TypeError: unhashable type: 'list'
    unhashable,不可哈希, 如果我们简单点理解,某数据“不可哈希”(unhashable)就是其可变,如list/dict,都能原地修改,就是unhashable。可改变的数据结构 :字典dict,列表list,集合set. 字典也被称作关联数组或哈希表.

    </br>

    创建字典

    1) 直接赋值创建

    字典由键(key)和对应值(value)成对组成。字典也被称作关联数组或哈希表。基本语法如下:

    dict1 = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'} #创建字典dict1
    

    创建空字典:
    使用字典来存储用户提供的数据或在编写能自动生成大量键—值对的代码时,通常都需要先 定义一个空字典:

    dict1 = {}
    

    注意:
    -每个键与值用冒号隔开(:),每对用逗号,每对用逗号分割,整体放在花括号中({})。
    -键必须独一无二,但值则不必。
    -值可以取任何数据类型,但必须是不可变的,如字符串,数组或元组。

    2)通过关键字dict和关键字参数创建

    Python里有一个内建关键字dict, 可以直接使用这个关键字创建字典.

    StuIfo = dict(name = "xiao ming",age = 12)
    print(StuIfo,type(StuIfo))
    

    运行结果:{'name': 'xiao ming', 'age': 12} <class 'dict'>

    3)通过二元组列表创建
    list1 = [('Iphone',6999),('xiaomi',1999)]
    phoneprice = dict(list1)
    print(list1)
    print(phoneprice,type(phoneprice))
    

    运行结果:

    [('Iphone', 6999), ('xiaomi', 1999)]
    {'Iphone': 6999, 'xiaomi': 1999} <class 'dict'>
    
    4)通过dict和zip结合创建
    dict3 = dict(zip('python',[1,2,3,4,5,6]))
    print(dict3,type(dict))
    

    运行结果:
    {'p': 1, 'y': 2, 't': 3, 'h': 4, 'o': 5, 'n': 6} <class 'type'>
    zip函数可以把两个对象结合在一起

    </br>

    增: 给字典增加元素

    1) 直接赋值来增加元素

    字典是一种动态结构,可随时在其中添加键—值对。要添加键—值对,可依次指定字典名、用 方括号括起的键和相关联的值。
    格式: 字典变量名['键(key)'] = 数据(value)

    dict1 = {'color': 'green', 'points': 5}   #原列表
    dict1['x_position'] = 0     #添加键值对:'x_position': 0
    dict1['y_position'] = 55    #添加键值对: 'y_position': 55
    print(dict1)
    

    运行结果:{'color': 'green', 'points': 5, 'x_position': 0, 'y_position': 55}
    [注意]:键—值对的排列顺序与添加顺序不同。Python不关心键—值对的添加顺序, 而只关心键和值之间的关联关系。

    2) 用方法.update添加合并两个

    利用一个字典项更新另一个字典。将一个字典里的项添加到另一个字典里,若两个字典里有相同的键,则更新其键对应的值。
    语句:dict1.update(dict2)

    dict4 = {"name":"xiao hong","age":12}
    dict5 = {"class":1, "grade":3}
    dict4.update(dict5)
    print(dict4)
    print(dict5)
    

    运行结果:

    {'name': 'xiao hong', 'age': 12, 'class': 1, 'grade': 3}
    {'class': 1, 'grade': 3}   # 这个字典还是存在的
    

    </br>

    删: 删除字典元素或字典

    可以删除单个字典元素或清除字典的全部内容。也可以在单个操作中删除整个字典。

    1)使用del语句删除元素,或整个字典

    要显式的删除某个元素或整个字典,只需使用del语句。
    使用del语句后,再访问被删除的元素或字典,引发一个异常,因为用del后该元素或字典不再存在:

    dict1 = {'x_position': 0, 'y_position': 25, 'speed': 'medium'}
    del dict1['speed']
    print(dict1['speed'])    #运行后报错:KeyError: 'speed'
    print(dict1)   
    
    dict2 = {"name":"xiao hong","age":12}
    del dict2
    print(dict2)  #运行后报错:NameError: name 'dict2' is not defined
    

    运行结果:

    KeyError: 'speed'
    {'x_position': 0, 'y_position': 25}
    NameError: name 'dict2' is not defined
    
    2)使用方法.clear()清空字典

    移除字典里所有 items 。不接受任何参数,返回值为 None 。
    再访问清空后的字典,会返回空字典.
    使用 : 字典名.clear()

    dict2 = {"name":"xiao hong","age":12}
    result = dict2.clear()
    print(result)    #返回none
    print(dict2)    #返回空字典
    

    运行结果:

    None
    {}
    
    3)使用方法.pop来删除指定元素, 会返回被删除的key所对应的值.

    移除字典数据pop()方法的作用是:删除指定给定键所对应的值,返回这个值并从字典中把它移除。
    若指定键不存在,一种情况程序会报错,另一种情况可以指定一个值作为返回值。
    [注意]字典pop()方法与列表pop()方法作用完全不同。

    dict2 = {"name":"xiao hong","age":12,'class': 1, 'grade': 3}
    result1 = dict2.pop("age")   #返回被删除的,age对应的值12
    result2 = dict2.pop("age")   #再次调用上次被pop删除的键值对, 直接打印输出,会报错. 运行后: result2 = dict2.pop("age"),KeyError: 'age'
    result3 = dict2.pop("age","key didn't found") # 在指定key后,再指定一个该key不存在时的返回值,会返回这个设定值.            运行后:key didn't found
    print(result1)
    print(result2)
    print(result3)
    print(dict2)
    

    运行结果:

    12    #print(result1)
    result2 = dict2.pop("age"),KeyError: 'age'   #print(result2)
    key didn't found         #print(result3)
    {'name': 'xiao hong', 'class': 1, 'grade': 3}    #print(dict2)
    
    4)使用popitem()方法随机抛出一对键值对,并返回值. 不接受任何参数.

    Python 字典 popitem() 方法随机返回并删除字典中的一对键和值(一般删除末尾对)。
    与列表的 pop 方法类似,但与之不同的是,由于字典是无序的,故是随机以(键,值)的形式抛出,并且返回(键,值)。不接受任何参数。
    如果字典已经为,却调用了此方法,就报出KeyError异常

    dict1 = {'x_position': 0, 'y_position': 25, 'speed': 'medium'}
    result1 = dict1.popitem()
    print(result1)
    

    运行结果:('speed', 'medium')

    改: 修改字典内的元素

    • 通过关键字访问对应的值,然后重新赋值, 即为修改字典元素.
    • 字典是可变对象,支持原处修改,也就是ID不变
    dict4 = {'name': 'xiao hong', 'age': 12, 'class': 1, 'grade': 3}
    dict4['class']=2  #更改键值对class:1为class:2
    print(dict4)
    

    运行结果:
    {'name': 'xiao hong', 'age': 12, 'class': 2, 'grade': 3}

    查: 查询(访问)字典

    • Python内置的字典类型,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
    • 字典可以像列表使用索引一样访问,但是字典使用的键,而非索引, 字典没有索引
    • 字典是可变对象,支持原处修改,也就是ID不变
    dict1 = {'Name': 'Zara', 'Age': 7, `Class': 'First'}
    print ("dict['Name']: ", dict['Name'])
    print ("dict['Age']: ", dict['Age'])
    

    运行结果:

    dict['Name']:  Zara
    dict['Age']:  7
    

    [注意]如果用字典里没有的键访问数据,会报错. 可以使用.get方法,不会报错,会返回None,也可以指定返回值

    遍历字典

    遍历字典,只取[key]

    • for循环字典,默认遍历的是字典的key:

      dict1 = {'name': 'xiao hong', 'age': 12, 'class': 1, 'grade': 3}
      for i in dict1:
          print(i)
      

      运行结果是:name age class grade

    • 也可以通过内置方法.keys()来遍历字典,遍历字典里所有的key.

      dict1 = {'name': 'xiao hong', 'age': 12, 'class': 1, 'grade': 3}
      for key in dict1.keys():
          print(key)
      

      运行结果同上.

    遍历字典, 只取[value]

    • 遍历所有的value值,需要使用Python的内置方法.values()
      dict1 = {'name': 'xiao hong', 'age': 12, 'class': 1, 'grade': 3}
      for x in dict1.values():
          print(x)
      

    运行结果:xiao hong 12 1 3

    遍历字典, [key]值和[value]值都取

    • 1.先使用方法.items()获取一个列表,这个列表内的放的元素,存的是元祖形式的原字典的键值对.
    • 2.遍历这个列表,拿到可字典的key和value
      dict1 = {'name': 'xiao hong', 'age': 12, 'class': 1, 'grade': 3}
      result = dict1.items()
      #print(result)          #print(result)运行结果:dict_items([('name', 'xiao hong'), ('age', 12), ('class', 1), ('grade', 3)])
      for key,value in result:       #key接收元祖里的第一个值,value接收元祖例的第二个值
      print(key,value)
      

    利用enumerate和下标控制遍历

    • enumerate()是python的内置函数,在字典上是枚举、列举的意思

    • enumerate可以获取遍历每一项的下标

    • 这样我们可以控制我遍历过程,可能有的时候不需要全遍历,可以利用它中断遍历

      dict1 = {'x_position': 0, 'y_position': 25, 'speed': 'medium'}
      for index, key in enumerate(dict1):
      if index == 2:
          break
      print(key)   
      
      print("-------这是一条分隔线-----------------")
      
      for index,value in enumerate(dict1.values()):  #遍历字典的value
      print(index,value)   #获取位置下标和字典的value值
      
      

      运行结果:

      x_position
      y_position
      -------这是一条分隔线-----------------
      0 0
      1 25
      2 medium
      
    ------------Python内置字典函数功能------------
    编号 函数 描述
    1 cmp(dict1, dict2) 在Python 3中不再可用。
    2 len(dict) 计算出字典的总长度。它将等于字典中的数据项数目。
    3 str(dict) 生成字典的可打印字符串表示形式
    4 type(variable) 返回传递变量的类型。如果传递变量是字典,那么它将返回一个字典类型。
    ------------Python内置字典方法------------

    python 3.x 中字典的方法一共 11 种,用命令 dir(dict)查看。每种方法的使用也可用 help(dict.clear)查看。

    编号 函数 描述
    1 dict.clear() 删除字典dict的所有元素
    2 dict.copy() 返回字典dict的浅拷贝
    3 dict.fromkeys() 创建一个新的字典,其中包含seq的值和设置为value的值。
    4 dict.get(key, default=None) 对于键(key)存在则返回其对应值,如果键不在字典中,则返回默认值
    5 dict.has_key(key) 此方法已删除,使用in操作符代替
    6 dict.items() 返回字典dict的(key,value)元组对的列表
    7 dict.keys() 返回字典dict的键列表
    8 dict.setdefault (key, default = None) 类似于get(),如果key不在字典dict中,则将执行赋值操作:dict [key] = default
    9 dict.update(dict2) 将字典dict2的键值对添加到字典dict
    10 dict.values() 返回字典dict的值列表

    [参考]:

    [扩展阅读]:

    相关文章

      网友评论

          本文标题:【Python基础】10. 字典

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