• Python基础学习笔记(05)字典


    Python基础学习(05)

    一、今日内容大纲

    • 字典的初识
    • 字典的使用
    • 字典的嵌套

    二、dict 字典

    1. 字典

      列表可以存储大量的数据,但数据之间的关联性不强,且列表的查询速度相对比较慢,字典作为另一种容器型数据类型的存在弥补了这些缺点,用大括号括起来,以键值对形式存储的数据类型。其基本形式如下:

      dict = {'Raigor':
       {'name:':'Raigor','age':18,'gender':male}
       'SB':
       ['马维','jklasdfgh']
      }
      
      • 键必须是不可变的数据类型:str、bool、int、tuple;

      • 值可以是任意数据类型、对象;

      • 字典在3.5及以前是无序的,3.6x会按照初次建立字典的顺序排列,学术上不认为字典是有序的,字典在3.7x以后都是有序的;

      • 字典的缺点是以空间换取时间,查询速度非常快。

    2. 数据类型的分类

      • 可变(不可hash)的数据类型:list、dict、set
      • 不可变(可hash)的数据类型:str、bool、int、tuple
    3. 字典的创建方式

      • 方式一:利用tuple的拆包

        dic = dict((('one',1),('two',2),('three',3)))
        print(dic)
        
      • 方式二:

        dic = dict(one = 1, two = 2, three = 3)
        print(dic)
        
      • 方式三:官方方式

        dic = dict({'one': 1, 'two': 2, 'three': 3})
        print(dic)
        

      三种方式运行结果都为:

      {'one': 1, 'two': 2, 'three': 3}
      
    4. 验证字典的合法性

      dic = {[1,2,3]: 'alex', 1: 666}
      print(dic)
      # TypeError: unhashable type: 'list'
      

    三、字典的增删改查

    1. 增加元素

      有下列一组dict:

      dic = {'name': 'Raigor', 'age': 18}
      
      • 方法一:直接增加

        dic['gender'] = 'male'              # 增加了一对键值对
        dic['age'] = 28                     # 更改了一对键值对
        print(dic)
        

        程序运行结果为:

        {'name': 'Raigor', 'age': 28, 'gender': 'male'}
        
      • 方法二:setdefault函数

        dic.setdefault('hobby','female')    # 增加了一堆键值对
        dic.setdefault('age',48)            # setfault函数不会修改原有的键值对
        print(dic)
        

        程序运行结果为:

        {'name': 'Raigor', 'age': 18, 'hobby': 'female'}
        
    2. 删除元素

      有下列一组dict:

      dic = {'name': 'Raigor', 'age': 18}
      
      • 方法一:pop函数按照键值删除键值对

        ret1 = dic.pop('age')
        print(ret1,dic)
        # ret2 = dic.pop('hobby')                         # 无该键会出现报错
        ret2 = dic.pop('hobby','No research result.')   # 如果pop对象不存在,会返回第二个值并不做改动
        print(ret2,dic)
        

        程序运行结果为:

        18 {'name': 'Raigor'}
        No research result. {'name': 'Raigor'}
        
      • 方法二:clear函数清空dict

        dic.clear()
        print(dic)
        

        程序运行结果为:

        {}
        
      • 方法三:del函数(不建议使用)

        del dic['age']
        # del dic['hobby']            # 删除不存在的键值对会出现报错,所以不推荐使用
        print(dic)
        

        程序运行结果为:

        {'name': 'Raigor'}
        
    3. 修改元素

      略,见增加元素中的索引操作。

    4. 查找元素

      有下列一组dict:

      dic = {'name': 'Raigor', 'age': 18}
      
      • 方法一:索引(不建议使用)

        print(dic['age'])
        print(dic['hobby'])         # dic['hobby']不存在会出现报错,所以不建议使用
        

        程序运行结果为:

        18
        
      • 方法二:get函数

        re1 = dic.get('age')
        re2 = dic.get('hobby','No research result.')        # 搜索字典中不存在的键的时候会返回第二个值
        print(re1,re2)
        

        程序运行结果为:

        18 No research result.
        

    四、特殊函数

    有下列一组dict数据:

    dic = {'name': 'Raigor', 'age': 18}
    
    1. keys关键词函数

      print(dic.keys(),type(dic.keys()))          # 可以将其转化为列表,也可以循环遍历它
      print(list(dic.keys()))                     # 转化为列表
      for key in dic.keys():                      # 循环遍历关键字,但这种方式意义不大,因为将dic.keys改为dic也会得出相同的结果
          print(key)
      

      程序运行结果为:

      dict_keys(['name', 'age']) <class 'dict_keys'>
      ['name', 'age']
      name
      age
      
    2. values对应值函数

      print(dic.values(),type(dic.values()))          #同keys函数的基本用法相同
      print(list(dic.values()))
      for value in dic.values():
          print(value)
      

      程序运行结果为:

      dict_values(['Raigor', 18]) <class 'dict_values'>
      ['Raigor', 18]
      Raigor
      18
      
    3. items键值对函数

      print(dic.items(),type(dic.items()))            # 同keys函数的基本用法相同
      print(list(dic.items()))
      for key, value in dic.items():                  # 利用元组的拆包可以遍历每个键值对的key和value
          print(key, value)
      

      程序运行结果为:

      dict_items([('name', 'Raigor'), ('age', 18)]) <class 'dict_items'>
      [('name', 'Raigor'), ('age', 18)]
      name Raigor
      age 18
      

    五、字典的嵌套

    # 习题一:
    dic = {
        'name':'汪峰',
        'age':48,
        'wife':[{'name':'国际章','age':38}],
        'children':{'girl_first':'小苹果','girl_second':'小怡','girl_three':'顶顶'}
    }
    
    # 1. 获取汪峰的名字。
    name = dic.get('name')
    print(name)
    # 2.获取这个字典:{'name':'国际章','age':38}。
    wife = dic.get('wife')
    print(wife)
    # 3. 获取汪峰妻子的名字。
    wife_name = wife[0].get('name')
    print(wife_name)
    # 4. 获取汪峰的第三个孩子名字。
    third_kid = dic.get('children').get('girl_three')
    print(third_kid)
    
    # 习题二:
    dic1 = {
        'name': ['alex', 2, 3, 5],
        'job': 'teacher',
        'oldboy': {'alex':['python1',"python2",100]}
    }
    # 1. 将name对应的列表追加一个元素'wusir'
    dic1.get('name').append('wusir')
    print(dic1.get('name'))
    # 2. 将name对应的列表中的alex大写
    dic1.get('name')[0] = dic1.get('name')[0].upper()
    print(dic1.get('name'))
    # 3. oldboy对应的字典加一个键值对'老男孩':'linux'
    dic1.get('oldboy').setdefault('老男孩', 'linux')
    print(dic1.get('oldboy'))
    # 4. 将oldboy对应的字典中的alex对应的列表中的python2删除
    dic1.get('oldboy').get('alex').remove('python2')
    print(dic1.get('oldboy'))
    
  • 相关阅读:
    网页加速的14条优化法则 网站开发与优化
    .NET在后置代码中输入JS提示语句(背景不会变白)
    C语言变量声明内存分配
    SQL Server Hosting Toolkit
    An established connection was aborted by the software in your host machine
    C语言程序设计 2009春季考试时间和地点
    C语言程序设计 函数递归调用示例
    让.Net 程序脱离.net framework框架运行
    C语言程序设计 答疑安排(2009春季 110周) 有变动
    软件测试技术,软件项目管理 实验时间安排 2009春季
  • 原文地址:https://www.cnblogs.com/raygor/p/13227638.html
Copyright © 2020-2023  润新知