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版本后做了个数据类型的小优化, 让字典内部的元素有序地进行存放;
但是这并无法改变字典这种数据类型的本质, 综上所述字典是一种无序数据类型!

原文地址:https://www.cnblogs.com/sn0wp3ak/p/13829047.html