• Python字典(dict)的操作方法汇总(约18种操作方法),并附示例代码


    声明:博主(昊虹图像算法)写这篇博文时,用的Python的版本号为3.9.10。

    字典(dict)的格式如下:

    dict1 = {key1 : value1, key2 : value2, key3 : value3 }
    
    • 1

    从上面的格式我们可以看出:
    字典的每个键值 key=>value 对用冒号分割,每个对之间用逗号分割,整个字典包括在花括号 {} 中。

    另外字典要求键必须是唯一的,但值则不必。

    01-字典的创建

    # 创建有内容的字典
    dict1 = {'name': 'suwenhao', 'likes': 'reading', 123: 456}
    
    # 方法一创建空字典
    dict2 = {}
    
    # 方法二创建空字典
    dict3 = dict()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    运行结果如下:
    在这里插入图片描述

    01-附1-利用方法fromkeys()配合元组快速生成多键值字典

    语法如下:

    dict.fromkeys(keys, value)
    
    • 1

    keys —必需。指定新字典键的可迭代对象。
    value—可选。所有键的值。默认值是 None。
    第一个示例代码如下:

    x = ('key1', 'key2', 'key3')
    y = 0
    
    dict1 = dict.fromkeys(x, y)
    
    • 1
    • 2
    • 3
    • 4

    运行结果如下:
    在这里插入图片描述
    第二个示例代码:

    x = ('key1', 'key2', 'key3')
    y = (61, 62, 63)
    
    dict1 = dict.fromkeys(x, y)
    
    • 1
    • 2
    • 3
    • 4

    运行结果如下:
    在这里插入图片描述
    注意:key1的键值并不是61,而是元组(61, 62, 63),这 一点要注意。

    第三个示例代码:

    x = ('key1', 'key2', 'key3')
    dict1 = dict.fromkeys(x)
    
    • 1
    • 2

    运行结果如下:
    在这里插入图片描述

    01-附2-利用内置函数dict()以多种方式快速生成多键值字典

    函数dict()至少可以以理三种方式快速生成多键值字典。
    ①通过“=”形式传入键名和键值来创建字典;
    ②通过Ptyhon内置函数zip()创建两个可迭代对象的映射关系来创建字典;
    ③通过两个元素的元组来创建字典;

    示例代码如下:

    dict1 = dict(a='a', b='b', t=5)  # 通过“=”形式传入键名和键值来创建字典
    dict2 = dict(zip(['one', 'two', 'three'], [1, 2, 3]))  # 通过内置函数zip()创建两个可迭代对象的映射关系来创建字典
    dict3 = dict([('one', 1), ('two', 2), ('three', 3)])   # 通过两个元素的元组来创建字典
    
    • 1
    • 2
    • 3

    运行结果如下:
    在这里插入图片描述

    02-字典值的访问

    示例代码如下:

    dict1 = {'name': 'suwenhao', 'likes': 'reading', 123: 456}
    
    str1 = dict1['name']
    value1 = dict1[123]
    
    • 1
    • 2
    • 3
    • 4

    运行结果如下:
    在这里插入图片描述

    03-更新字典某个键的值、新增键值

    示例代码如下:

    dict1 = {'name': 'suwenhao', 'likes': 'reading', 123: 456}
    k = 1
    dict1['name'] = 'wanghong'  # 更新键name的值
    dict1['height'] = 167  # 增加键值
    
    • 1
    • 2
    • 3
    • 4

    运行结果如下:
    在这里插入图片描述
    提问:为什么中间有插一句语句"k = 1",答案见下面这篇博文:
    https://blog.csdn.net/wenhao_ir/article/details/125416514

    04-用del语句删除字典中的键值

    示例代码如下:

    dict1 = {'name': 'suwenhao', 'likes': 'reading', 123: 456}
    del dict1['name']
    
    • 1
    • 2

    运行结果如下:
    在这里插入图片描述

    05-用del语句删除整个字典

    示例代码如下:

    dict1 = {'name': 'suwenhao', 'likes': 'reading', 123: 456}
    dict2 = {'name': 'wanghong', 'likes': 'sing', 999: 704}
    del dict1
    
    • 1
    • 2
    • 3

    运行结果如下:
    在这里插入图片描述

    06-用方法clear()清空字典

    示例代码如下:

    dict1 = {'name': 'suwenhao', 'likes': 'reading', 123: 456}
    dict1.clear()
    
    • 1
    • 2

    运行结果如下:
    在这里插入图片描述

    07-用函数len()统计字典键值对的个数

    示例代码如下:

    dict1 = {'name': 'suwenhao', 'likes': 'reading', 123: 456}
    len1 = len(dict1)
    
    • 1
    • 2

    运行结果如下:
    在这里插入图片描述

    06-用函数str()将字典字符串化

    示例代码如下:

    dict1 = {'name': 'suwenhao', 'likes': 'reading', 123: 456}
    str1 = str(dict1)
    print(str1)
    
    • 1
    • 2
    • 3

    运行结果如下:
    在这里插入图片描述
    在这里插入图片描述

    07-使用方法copy()实现字典的深拷贝

    示例代码如下:

    dict1 = {'name': 'suwenhao', 'likes': 'reading', 123: 456}
    dict2 = dict1.copy()
    dict1['name'] = 'zhangsan'
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    从运行结果我们可以看出,方法copy()的确实现的是深拷贝,改变dict1的键值并没有影响到dict2的值。

    08-使用“=”实现字典的浅拷贝

    示例代码如下:

    dict1 = {'name': 'suwenhao', 'likes': 'reading', 123: 456}
    dict2 = dict1
    dict1['name'] = 'zhangsan'
    
    • 1
    • 2
    • 3

    运行结果如下:
    在这里插入图片描述
    从上面的运行结果可以看出,dict1键值的修改影响了dict2的键值,说明二者是共用内存空间的。

    09-使用“in”判断某键是否在字典里

    示例代码如下:

    dict1 = {'name': 'suwenhao', 'likes': 'reading', 123: 456}
    bool1 = 'name' in dict1
    bool2 = 'weight' in dict1
    
    • 1
    • 2
    • 3

    运行结果如下:
    在这里插入图片描述

    10-使用方法items()获得字典键和值的视图对象

    示例代码如下:

    dict1 = {'name': 'suwenhao', 'likes': 'reading', 123: 456}
    dict1_items = dict1.items()
    print(dict1_items)
    
    • 1
    • 2
    • 3

    运行结果如下:
    在这里插入图片描述
    在这里插入图片描述
    可见,这个视图对象就是把字典对象换了一种形式表示。
    比如原来的键值形式为:

    'name': 'suwenhao'
    
    • 1

    转换为视图对象(dict_items)后为下面这样的形式:

    ('name', 'suwenhao')
    
    • 1

    值得注意的是,原键值必变,对应的视图对象也会跟着改变,看一个例子:

    dict1 = {'name': 'suwenhao', 'likes': 'reading', 123: 456}
    dict1_items = dict1.items()
    dict1['name'] = 'zhangsan'
    print(dict1_items)
    
    • 1
    • 2
    • 3
    • 4

    运行结果如下图所示:
    在这里插入图片描述
    视图对象可以用函数list()转换为列表类型,如下面的例子:

    dict1 = {'name': 'suwenhao', 'likes': 'reading', 123: 456}
    dict1_items = dict1.items()
    list1 = list(dict1_items)
    
    • 1
    • 2
    • 3

    运行结果如下:
    在这里插入图片描述
    从上面的结果可以看出,转换为列表对象后,每一个键值是一个元组(tuple)。

    关于视图对象,注意,我们不能对视图对象进行任何的修改,因为字典的视图对象都是只读的。

    11-使用方法keys() 获得字典键的视图对象

    示例代码如下:

    dict1 = {'name': 'suwenhao', 'likes': 'reading', 123: 456}
    dict1_keys = dict1.keys()
    list1 = list(dict1_keys)
    
    • 1
    • 2
    • 3

    运行结果如下:
    在这里插入图片描述
    相关知识和说明请参考“10-使用方法items()获得字典键和值的视图对象”

    12-使用方法values()获得字典键的值的视图对象

    示例代码如下:

    dict1 = {'name': 'suwenhao', 'likes': 'reading', 123: 456}
    dict1_values = dict1.values()
    list1 = list(dict1_values)
    
    • 1
    • 2
    • 3

    运行结果如下:
    在这里插入图片描述
    相关知识和说明请参考“10-使用方法items()获得字典键和值的视图对象”

    13-1-使用方法get()返回某键的值

    示例代码如下:

    dict1 = {'name': 'suwenhao', 'likes': 'reading', 123: 456}
    
    str1 = dict1.get('name')
    
    • 1
    • 2
    • 3

    运行结果如下:
    在这里插入图片描述

    13-2-使用方法setdefault()返回某键的值(如果键不存在,则自动创建)

    方法 setdefault()的语法如下:

    dict.setdefault(key, default=None)
    
    • 1

    参数:
    key – 查找的键值。
    default – 键不存在时,设置的默认键值。
    返回值:
    如果 key 在 字典中,返回对应的值。如果不在字典中,则插入 key 及设置的默认值 default,并返回 default ,default 默认值为 None。
    示例代码如下:

    dict1 = {'name': 'suwenhao', 'likes': 'reading', 123: 456}
    
    str1 = dict1.setdefault('name', 'zhangsan')
    str2 = dict1.setdefault('likes', None)
    temp1 = dict1.setdefault('weight', None)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    运行结果如下:
    在这里插入图片描述
    结果分析:
    由于键’name’是存在的,所以语句:

    str1 = dict1.setdefault('name', 'zhangsan')
    
    • 1

    并不会改变其键值,并且返回了其键值‘suwenhao’
    由于键’weight’是不存在的,所以在字典dict1中新增了键’weight’,其值设为None。

    14-使用方法update()将一个字典的键值添加到另一个字典中

    示例代码如下:

    dict1 = {'name': 'suwenhao', 'likes': 'reading', 123: 456}
    dict2 = {'weight': 30}
    
    dict1.update(dict2)
    
    • 1
    • 2
    • 3
    • 4

    运行结果如下:
    在这里插入图片描述

    15-使用方法pop()删除某对键值,并返回键的值

    示例代码如下:

    dict1 = {'name': 'suwenhao', 'likes': 'reading', 123: 456}
    
    temp1 = dict1.pop('name')
    
    • 1
    • 2
    • 3

    运行结果如下:
    在这里插入图片描述

    16-使用方法popitem() 删除最后插入的键值,并返回键及其值

    最后插入的键值通常就是末尾键值嘛。
    示例代码如下:

    dict1 = {'name': 'suwenhao', 'likes': 'reading', 123: 456}
    
    temp1 = dict1.popitem()
    
    • 1
    • 2
    • 3

    运行结果如下:
    在这里插入图片描述

    17-键在使用时需要注意的两点

    1、不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住,如下实例:

    dict1 = {'name': 'suwenhao', 'likes': 'reading', 123: 456, 'name': 'zhangsan'}
    str1 = dict1['name']
    
    • 1
    • 2

    运行结果如下:
    在这里插入图片描述
    2、键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行,如下面的语句:

    dict1 = {['name']: 'suwenhao', 'likes': 'reading', 123: 456}
    
    • 1

    在运行时报错如下:
    在这里插入图片描述

    参考资料:
    https://blog.csdn.net/wenhao_ir/article/details/125100220

  • 相关阅读:
    单区域OSPF配置
    PCE模型,FomoCat为何发起反Web3空气资产的社区试验
    一条 sql 了解 MYSQL 的架构设计
    JAVA8新特性
    字节码进阶之java反射的底层实现原理
    虚拟机Ubuntu操作系统最基本终端命令(安装包+详细解释+详细演示)
    Linux计划任务
    AWS Cloudformation入门项目实践
    C++中常见的头文件
    Golang新版本 Go1.19新的fmt方法
  • 原文地址:https://blog.csdn.net/wenhao_ir/article/details/125412774