Python 中 dict 的基本用法

1. dict 基本方法

dict: 存在键值对而且每个键值对是无序的,其中 key 是不可修改的,value 是可以改变的。故 list 和 dict 不能作为列表的 key。

1.1 增

copy(self)
fromkeys(*args, **kwargs)

例子:
在这里插入图片描述

1.2 删

clear(self)
pop(self, k, d=None)
popitem(self)

例子:
在这里插入图片描述

1.3 改

setdefault(self, *args, **kwargs)
update(self, E=None, **F)

例子:
在这里插入图片描述在这里插入图片描述

1.4 查

keys(self)
values(self)
items(self)
get(self, *args, **kwargs)

这几个是 dict 中最重要的

例子:
在这里插入图片描述

2. dict 索引

info = {
    "d1": "d1",
    "d2": "d2",
    ("89", 12,): "d3",
    True: "d4",
    "info":
        [
            "information",
            12,
            ("89", 12,),
            ["mate", 65],
            {
                "name": "Y",
                "age": [18, "18"],
                "k2": "v2",
                "k3": "v3",
                "k4": "v4"
            }
        ],
    "comment": True
}

在这里插入图片描述

3. dict 合并

这里有几种方法

from copy import deepcopy
import itertools
from collections import ChainMap


def line():
    print("--------------------------------------------------------")


def lineln():
    print("--------------------------------------------------------\n")


if __name__ == '__main__':
    '''第一种方法: 最普通的方法'''
    print("第一种方法: 最普通的方法")
    # 两个字典
    dict_1 = {"name": "小红", "age": 14, "sex": "女"}
    dict_2 = {"class": "初一", "sex": "男"}
    # dict_2 追加给 dict_1,dict_1 改变
    dict_1.update(dict_2)
    print(dict_1)
    print(dict_2)
    line()

    # 两个字典
    dict_1 = {"name": "小红", "age": 14, "sex": "女"}
    dict_2 = {"class": "初一", "sex": "男"}
    # dict_1 深拷贝 new_dict,dict_1 不改变
    new_dict = deepcopy(dict_1)
    new_dict.update(dict_2)
    print(new_dict)
    print(dict_1)
    print(dict_2)
    lineln()

    '''第二种方法: 先解包再合并字典'''
    print("第二种方法: 先解包再合并字典")
    # 两个字典
    dict_1 = {"name": "小红", "age": 14, "sex": "女"}
    dict_2 = {"class": "初一", "sex": "男"}
    # 先解包再合并字典
    new_dict_1 = {**dict_1, **dict_2}
    print(new_dict_1)
    line()
    # 两个字典
    dict_1 = {"name": "小红", "age": 14, "sex": "女"}
    # dict_2 = {"class": "初一", "sex": "男"}
    dict_2 = {"class": "初一"}
    # 这种方法不能有一样的 key, 否则会报错
    new_dict_2 = dict(**dict_1, **dict_2)
    print(new_dict_2)
    lineln()

    '''第三种方法: 借助 itertools'''
    print("第三种方法: 借助 itertools")
    # 两个字典
    dict_1 = {"name": "小红", "age": 14, "sex": "女"}
    dict_2 = {"class": "初一", "sex": "男"}
    # 通过迭代后转化为字典类型
    new_dict = dict(itertools.chain(dict_1.items(), dict_2.items()))
    print(new_dict)
    lineln()

    '''第四种方法: 借助 ChainMap'''
    print("第四种方法: 借助 ChainMap")
    # 两个字典
    dict_1 = {"name": "小红", "age": 14, "sex": "女"}
    dict_2 = {"class": "初一", "sex": "男"}
    # ChainMap 和 itertools 原理一样,通过迭代. 从结果可以看出, 先迭代 dict_1, 后迭代 dict_2, 所以结果看起来 sex 被覆盖
    new_dict = dict(ChainMap(dict_1, dict_2))
    print(new_dict)
    lineln()

    '''第五种方法: 使用 dict.items() 合并'''
    print("第五种方法: 使用 dict.items() 合并")
    # 两个字典
    dict_1 = {"name": "小红", "age": 14, "sex": "女"}
    dict_2 = {"class": "初一", "sex": "男"}
    # 先利用 items 方法将 dict 转成 dict_items, 再对其取并集转化为 dict 即可, 相同的 key 随机
    new_dict = dict(dict_1.items() | dict_2.items())
    print(new_dict)
    line()
    # 两个字典
    dict_1 = {"name": "小红", "age": 14, "sex": "女"}
    dict_2 = {"class": "初一", "sex": "男"}
    # 先利用 items 方法将 dict 转成 dict_items, 再使用 list 函数合并, 相同的 key 会被后面的覆盖
    new_dict = dict(list(dict_1.items()) + list(dict_2.items()))
    print(new_dict)
    lineln()

    '''第六种方法: '''
    print("第六种方法: 使用 dict.items() 合并")
    # 两个字典
    dict_1 = {"name": "小红", "age": 14, "sex": "女"}
    dict_2 = {"class": "初一", "sex": "男"}
    # 烧脑表达式
    new_dict = {k: v for d in [dict_1, dict_2] for k, v in d.items()}
    print(new_dict)
    lineln()

    '''第七种方法: Python 3.9 新特性'''
    print("第七种方法: Python 3.9 新特性")
    # 两个字典
    dict_1 = {"name": "小红", "age": 14, "sex": "女"}
    dict_2 = {"class": "初一", "sex": "男"}
    # 先利用 items 方法将 dict 转成 dict_items, 再对其取并集转化为 dict 即可, 相同的 key 随机
    new_dict = dict_1 | dict_2
    print(new_dict)
    line()
    # 两个字典
    dict_1 = {"name": "小红", "age": 14, "sex": "女"}
    dict_2 = {"class": "初一", "sex": "男"}
    # 原地更新
    dict_1 |= dict_2
    print(dict_1)
    line()
    # 两个字典
    dict_1 = {"name": "小红", "age": 14, "sex": "女"}
    dict_2 = {"class": "初一", "sex": "男"}
    # 原地更新
    dict_2 |= dict_1
    print(dict_2)
    # 原地更新
    lineln()

在这里插入图片描述

参考网址:
[1]: https://blog.csdn.net/dQCFKyQDXYm3F8rB0/article/details/105570507

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值