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'))
原文地址:https://www.cnblogs.com/raygor/p/13227638.html