zoukankan      html  css  js  c++  java
  • Python容器篇 4 -- 字典

    字典

    dict = {key1:value1, key2:value2, ...}

    定义一个空字典

    1. em_dict = dict()
    2. em_dict = {}

    字典的特性

    • 可能存在多个相同的value(可重复), 但是key绝对是唯一存在的!
    • 字典不支持下标/索引和切片, 字典是通过key(键)来访问的

    查找字典数据

    1. dict[key]
      • 这种访问方式, 如果key不存在, 会直接报错
    2. dict.get(key)
      • 这种方式, 如果key不存在, 不会报错, 而是返回 None
    3. dict.get(key, default)
      • 这种方式更细致, 如果key不存在, 不会返回 None, 而是返回默认值 default

    修改和添加字典数据

    1. dict[key] = value
      • 如果key存在, 做修改操作
      • 如果key不存在, 在末尾做添加操作
    2. dict.update({key:value, ...})
      • 这种方法是用字典型的数据去做添加修改操作
      • 如果key存在, 做修改操作
      • 如果key不存在, 在末尾做添加操作

    删除字典数据

    1. 删除指定元素(键值对)
      • del dict[key]
      • dict.pop(key)
    2. 删除整个字典
      • del dict
      • dict.clear()

    字典的长度

    • 长度就是键值对的个数
    • len(dict)

    返回包含字典中所有key值的一个列表

    • dict.keys()

    返回包含字典中所有value值的一个列表

    • dict.values()

    返回包含字典中所有键值对元组的一个列表

    • 列表中的元素形如 (key, value)
    • dict.items()

    遍历字典

    1. 直接遍历(也就相当于只遍历key值)
      • for key in dict:
    2. 遍历字典的key值
      • for key in dict.keys():
    3. 遍历字典的value值
      • for value in dict.values():
    4. 遍历字典中的的元素(键值对)
      • for item in dict.items():
      • 一定要注意了, 此处返回值是元组类型的 (key, value)
    5. 遍历字典中的key,value键值对:
      • for key, value in dict.items():
      • 注意, 此处相当于一个元组的拆包操作, 把(key, value)拆出来给key和value变量

    关于有序字典和无序字典

    既然字典没有下标去定位顺序, 那么自然有个疑问, 字典中的元素是有序地存放着的吗??

    其实字典这个容器分为有序字典和无序字典, 在Python3.6版本之后, 我们创建的dict默认就是有序字典

    而在3.6版本之前, 我们创建的dict则默认是无序字典, 无序字典的特点是:每次访问, 字典中元素的顺序是随机的!

    那么问题来了, 如果想在3.6之前的版本环境下创建一个有序字典怎么办呢??

    from collections import OrderedDict
    my_dict = OrderedDict()  # 创建一个有序字典
    

    但是即使3.6版本后的字典中元素是默认有序的存放的, 但是, 注意但是, 字典这种类型的容器在归类上是属于无序的数据类型的!!!

    那么, 这个数据类型的有序和无序是怎么看的呢?

    主要还是看能不能用下标索引出来,
    比如: 字符串, 元组 和 列表 这仨就是有序数据类型
    而: 字典 和 集合 这俩就是无序的

    也可以这么理解, 字典这种数据类型在绝大多数编程语言中都是无序的;
    只不过python3.6版本后做了个数据类型的小优化, 让字典内部的元素有序地进行存放;
    但是这并无法改变字典这种数据类型的本质, 综上所述字典是一种无序数据类型!

  • 相关阅读:
    文言文
    【我回来了】TO DO LIST
    AFO
    [DP]
    [CF1221F]Choose a Square
    关于博主(2)
    自我介绍( 并不?
    老年选手的复健之路
    CSP/NOIP 2019 游记
    CSP前模板复习
  • 原文地址:https://www.cnblogs.com/sn0wp3ak/p/13829047.html
Copyright © 2011-2022 走看看