字典的初识

  • why:
    • 列表可以存储大量的数据,但数据之间的关联性不强
    • 列表的查询速度比较慢。数量越大查询越慢
  • what:容器型数据类型:dict
  • how:
    • 数据类型的分类(可变与不可变)

      • 可变(不可哈希)的数据类型:list dict set 
      • 不可变(可哈吉)的数据类型:str bool int tuple (对原对象本身不可变) 
    • 字典:{}括起来,以键值对形式存储的容器型数据类型:
      dic = {
      '小明':
      {'name': '小明', 'age': 18, 'sex': '男'},
      '名单':
      ['小红', '小猪', '小严']
      }
    • 键必须是不可变的数据类型:int,str, bool tuple(唯一的)不然后一个就会把前一个给覆盖

      dic = {1: 'a', 1: 'b', 2: 'c'}
      print(dic) # {1: 'b', 2: 'c'}
    • 值可以是任意数据类型,对象。

    • 字典3.5版本之前包括3.5是 无序的。

    • 字典在3.6会按照初次建立字典的顺序排列,学术上不认为是有序的。
    • 字典在3.7以后都是有序的。
    • 字典的优点:查询速度非常快,存储关联性的数据
    • 字典的缺点:以空间换时间。
  • 字典的创建方式:面试题说出创建字典的方法
    • 方式一:

      dic = dict((('one', 1), ('tow', 2), ('stree', 3)))
      print(dic) # {'one': 1, 'tow': 2, 'stree': 3}
    • 方式二:
      dic = dict(noe=1, tow=2, three=3)
      print(dic) # {'noe': 1, 'tow': 2, 'three': 3}
    • 方式三:最正规的方式(官方)
      dic = dict({'noe': 1, 'tow': 2, 'three': 3})
      print(dic) # {'noe': 1, 'tow': 2, 'three': 3}
  • 字典的合法性,键必须是不可变的
    dic = {[1, 2]: 'ab', 1: 19}
    print(dic) dic = {[1, 2]: 'ab', 1: 19}
    TypeError: unhashable type: 'list'

字典的使用(增删改查)

  • 增:

    • 直接增加,有则改之,无则增加

      dic = {'name': '小明', 'age': 18}
      
      dic['sex'] = '男'  # {'name': '小明', 'age': 18, 'sex': '男'}
      dic['age'] = 23 # {'name': '小明', 'age': 23}
    • setdefault: 有则不变,无则增加
      dic = {'name': '小明', 'age': 18}
      
      dic.setdefault('age', 45)  # {'name': '小明', 'age': 18}
      dic.setdefault('set', '男') # {'name': '小明', 'age': 18, 'sex': '男'
  • 删除
    • pop:按照键值去删除键值对,返回对应的值,并且将字典当中的键值对删除

      dic = {'name': '小明', 'age': 18}
      
      dic.pop('age')  # 字典删除后为{'name': '小明'} 并返回18
      dic.pop('sex') # 没有此键就会报错
      dic.pop('sex', '没有此键') # 设置第二个参数,无论字典中是否有此键值,返回第二个参数的内容
    • clear:清空,内容清空
    • del:和pop一样但没有就报错,没有第二个参数,建议用pop
    • 直接改:

      dic = {'name': '小明', 'age': 18}
      dic['age'] = 55
      print(dic) # {'name': '小明', 'age': 55}
    • get()

      dic = {'name': '小明', 'age': 18}
      
      ll = dic.get('age')  # 返回查询的值
      ls = dic.get('sex', '没有此键') # 设置第二个参数,字典中没有此键值,返回第二个参数的内容
      print(ll) # 18
      print(ls) # 没有此键
    • keys() values() items() 三个特殊的
      dic = {'name': '小明', 'age': 18}
      
      print(dic.keys())  #  dict_keys(['name', 'age'])
      list(dic.keys()) # 转换成一个列表
    • values() 和keys一致,加载所以的键放在一个特殊的数字类型里去,可以转化成列表,也可以直接for循环
    • items()以元组的形式返回所有的键值对,可for循环遍历
      dic = {'name': '小明', 'age': 18}
      
      print(dic.items())  # dict_items([('name', '小明'), ('age', 18)])
      #----------------------------------------- # 使用元组的拆包 for i in dic.items():
      print(i) ('name', '小明')
      ('age', 18)
      #---------------------------------------------
      for key, value in dic.items():
      print(key, value) name 小明
      age 18
  • 相关题:
    a = 11
    b = 19
    # 解:
    a, b = b, a # 19, 11

字典的嵌套

dic = {
'name': '汪峰',
'age': 48,
'wife': [{'name': '国际章', 'age': 38}, ],
'children': {'girl_first': '小苹果', 'girl_second': '小怡', 'girl_three': '顶顶'}
} # 1. 获取汪峰的名字。
ll = dic.get('name')
print(ll) # 汪峰
# 2.获取这个字典:{'name':'国际章','age':38}。
ll = dic.get('wife')[0]
print(ll) # {'name': '国际章', 'age': 38}
# 3. 获取汪峰妻子的名字。
ll = dic.get('wife')[0].get('name')
print(ll) # 国际章
# 4. 获取汪峰的第三个孩子名字。
ll = dic.get('children').get('girl_three')
print(ll) # 顶顶

总结

字典:查询速度快,数据关联性强

  • 键不可变的数据类型(str int),唯一

  • 值:任意数据类型,对象

  • 增删改查

  • 字典的嵌套

day-05-字典的更多相关文章

  1. python学习05——字典

    笨办法学python第39节 这节主要讲解的是字典,首先字典和列表的两个区别是: 1. 列表中可以通过数字找到列表中的元素,是数字作为索引的:字典中可以通过任何东西找到想要的元素,即字典可以将一个物件 ...

  2. day 05字典相关内容

    1.day 04内容回顾及作业讲解 列表:增 append insert extend 删 remove pop clear del 改 li[索引]='被修改的内容' li[切片]='被修改的内容' ...

  3. python note 05 字典及其操作

    1. '''#数据类型划分:可变数据类型,不可变数据类型不可变数据类型:元组,bool int str 可哈希可变数据类型:list,dict set 不可哈希dict key 必须是不可变数据类型, ...

  4. python --- 05 字典 集合

    一.字典 可变数据类型 {key:value}形式   查找效率高   key值必须是不可变的数据类型 1.增删改查 1).增    dic["新key"] = "新va ...

  5. python之路---05 字典 集合

    二十.字典 可变数据类型 {key:value}形式   查找效率高   key值必须是不可变的数据类型 1.增删改查 1).增    dic["新key"] = "新v ...

  6. day 05 字典,字典嵌套

    字典: 1.列表如果存储大量数据,查询速度相对慢一些 2.列表存储的数据,一般没有什么关联性 针对以上原因,python提供了一个基础数据类型,dict 字典 数据类型的分类 : 容器型数据类型:li ...

  7. python基础篇 05字典

    本节主要内容:1. 字典的简单介绍2. 字典增删改查和其他操作3. 字典的嵌套 一. 字典的简单介绍:字典(dict)是python中唯一的一个映射类型.他是以{ }括起来的键值对组成. 在dict中 ...

  8. python 05 字典

    [TOC] 字典——dict { } 字典是无序,可变的数据类型. 字典:用于存储数据,存储大量数据,字典要比列表快:将数据和数据之间进行关联. 1. 定义:  dic = {键:值,键:值}  #每 ...

  9. python 05—字典

    一.字典的键是唯一的 键:简单对象,例[字符串.整数.浮点数.bool值] list不能作为键,但可以作为值. 例: score = { '萧峰' : 95, '段誉' : 97, '虚竹' : 89 ...

  10. Python全栈开发第二期课表

     day01-python 全栈开发-基础篇                 01 开课介绍 01:55:13 ★  02 开课介绍02 01:28:31 ★  03 开课介绍03 00:22:55 ...

随机推荐

  1. npm & cmd & bash & bin

    npm & cmd & bash & bin bin node_modules & nested npm publish & all src files npm ...

  2. ES6 & import * & import default & import JSON

    ES6 & import * & import default & import JSON import json & default value bug api.js ...

  3. taro H5

    taro H5 开发指南 https://nervjs.github.io/taro/docs/GETTING-STARTED.html#h5 taro # build $ taro build -- ...

  4. Win10安装VSCode并配置Python环境 完整版超详细简单【原创】

    我们分为三个步骤进行: 一.下载VSCode 二.配置Python环境 三.测试Python 一.下载VSCode 1.打开国内镜像vscode下载地址,即可自动下载:https://vscode.c ...

  5. 数据序列化工具——flatbuffer

    flatbuffer是一款类似于protobuf的数据序列化工具.所有数据序列化,简单来说,就是将某程数据结构按照一定的格式进行编码与解码,以方便在不同的进程间传递后,能够正确的还原成之前的数据结构. ...

  6. Mybatis【20】-- Mybatis延迟加载怎么处理?

    注:代码已托管在GitHub上,地址是:https://github.com/Damaer/Mybatis-Learning ,项目是mybatis-16-lazyload,需要自取,需要配置mave ...

  7. E百科 | 基于MEC的边缘AI服务

    简介: 阿里云边缘计算团队付哲解读5G下热门场景:边缘AI.作者:阿里云付哲,计算机科学与技术专业博士后,在流量检测.资源调度领域有深入研究,其论文<Astraea: Deploy AI Ser ...

  8. Pandas初体验

    目录 Pandas 一.简介 1.安装 2.引用方法 二.series 1.创建方法 2.缺失数据处理 2.1 什么是缺失值 2.2 NaN特性 2.3 填充NaN 2.4 删除NaN 2.5 其他方 ...

  9. Java获取微信公众号新增用户事件

    一.新建项目工程 新建一个spring项目 填写 Group 和 Artifact 信息 这步可以直接跳过,后面再按需导入 选择工程地址 二.配置 pom.xml <dependencies&g ...

  10. Flask:Jinjia模板

    Jinja2是Python下一个被广泛应用的模版引擎,他的设计思想来源于Django的模板引擎,并扩展了其语法和一系列强大的功能. 一.变量 1.1 手动传入的变量: 基本类型:{{ var }} 字 ...