Python 中常见的数据结构之一嵌套字典

Python 中常见的数据结构之一嵌套字典

Python 中常见的数据结构之一嵌套字典

Python 提供了数据结构的全只面支持,包括用于存储数据和访问数据以进行处理和检索的关键工具。前面的文章里讨论过在 Python 中可用的数据结构对象,在这里,我们将进一步讲解嵌套字典、数据结构推导式,等稍微高级一些的概念。

嵌套字典

嵌套字典是把一个字典放入另一个字典中。嵌套字典在现实世界中非常有用,尤其是在需要把一种数据格式转换为另一种数据格式时。下面的代码(这里是伪代码)就定义了一个嵌套字典:

python 复制代码
root_dict = {'1': {dictA}, 'B': {dictB}},
             '2': [list2],
             '3': {'X': val1, 'Y': val2, 'Z': val3}

可以看到,在 root_dict 里,有字典 dictAdictB,还有列表 list2,以及有 3 索引的一个未命名字典。

创建或定义一个嵌套字典

通过把由逗号分隔的字典,放入到花括号里,可以定义或创建一个嵌套字典。下面的代码创建了一个管理学生信息的嵌套字典。每个学生记录都是另一个字典,它带有两个字段,名字年龄,由学号索引:

python 复制代码
dict1 = {100: {'姓名': '张三', '年龄': 24},
         101: {'姓名': '李四', '年龄': 23},
         102: {'姓名': '王五', '年龄': 22}}

print(dict1)
print(dict1.keys())
print(dict1.values())
print(dict1.items())
print(dict1.get(100))

上面代码的输出结果是:

复制代码
{100: {'姓名': '张三', '年龄': 24}, 101: {'姓名': '李四', '年龄': 23}, 102: {'姓名': '王五', '年龄': 22}}
dict_keys([100, 101, 102])
dict_values([{'姓名': '张三', '年龄': 24}, {'姓名': '李四', '年龄': 23}, {'姓名': '王五', '年龄': 22}])
dict_items([(100, {'姓名': '张三', '年龄': 24}), (101, {'姓名': '李四', '年龄': 23}), (102, {'姓名': '王五', '年龄': 22})])
{'姓名': '张三', '年龄': 24}

嵌套字典是很容易理解的,访问其中的元素,也是非常容易理。

向嵌套字典添加元素

动态创建一个嵌套字典,或向已存在的嵌套字典添加元素,存在多种方案。在下面的代码中,我将展示三种不同的构建嵌套字典的方案。请看示例:

python 复制代码
# 方法1:定义一个内部字典 1
学生100 = {'姓名': '张三', '年龄': 24}

# 方法2:定义一个内部字典 2
学生101 = {}
学生101['姓名'] = '李四'
学生101['年龄'] = 23

# 把学生100和学生101放入根(外部)字典中
dict1 = {}
dict1[100] = 学生100
dict1[101] = 学生101

#方法3:在根字典中创建一个内部字典 3
dict1[102] = {}
dict1[102]['姓名'] = '王五'
dict1[102]['年龄'] = 22

print(dict1)
print(dict1.items())

以上代码的输出结果是:

复制代码
{100: {'姓名': '张三', '年龄': 24}, 101: {'姓名': '李四', '年龄': 23}, 102: {'姓名': '王五', '年龄': 22}}
dict_items([(100, {'姓名': '张三', '年龄': 24}), (101, {'姓名': '李四', '年龄': 23}), (102, {'姓名': '王五', '年龄': 22})])

上面的代码,理解起来是比较直观的。

  1. 在第一种情况下,我们通过直接赋值的方式,把两个键-值对赋值给了一个变量学生100,这个变量就成了一个字典;如果条件允许,推荐使用这种方式,因为它简单直接,易于管理和维护;

  2. 第二种情况,我们用花括号创建了一个空字典学生101,然后通过赋值的方式逐一创建键-值对,用当字典的索引,写入值。这也是一种推荐的创建字典的方式;

  3. 在第三种情况下,我们直接在外部字典中初始化了一个空字典,然后,依次给字段赋值。

删除嵌套字典中的元素

python 复制代码
dict1 = {100: {'姓名': '张三', '年龄': 24},
         101: {'姓名': '李四', '年龄': 23},
         102: {'姓名': '王五', '年龄': 22}}

del (dict1[101]['年龄'])
dict1[102].pop('姓名')

print(dict1)
print(dict1.keys())
print(dict1.values())
print(dict1.items())
print(dict1.get(100))

上面代码的输出结果是:

复制代码
{100: {'姓名': '张三', '年龄': 24}, 101: {'姓名': '李四'}, 102: {'年龄': 22}}
dict_keys([100, 101, 102])
dict_values([{'姓名': '张三', '年龄': 24}, {'姓名': '李四'}, {'年龄': 22}])
dict_items([(100, {'姓名': '张三', '年龄': 24}), (101, {'姓名': '李四'}), (102, {'年龄': 22})])
{'姓名': '张三', '年龄': 24}

可见,可以用 del 方法,或 pod 方法,删除嵌套字典、字典中的任何字段。

<完>

相关推荐
喵手1 小时前
Python爬虫实战:旅游数据采集实战 - 携程&去哪儿酒店机票价格监控完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集结果csv导出·旅游数据采集·携程/去哪儿酒店机票价格监控
2501_944934731 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python
helloworldandy1 小时前
使用Pandas进行数据分析:从数据清洗到可视化
jvm·数据库·python
失忆爆表症1 小时前
05_UI 组件库集成指南:Shadcn/ui + Tailwind CSS v4
前端·css·ui
小迷糊的学习记录1 小时前
Vuex 与 pinia
前端·javascript·vue.js
发现一只大呆瓜2 小时前
前端性能优化:图片懒加载的三种手写方案
前端·javascript·面试
不爱吃糖的程序媛2 小时前
Flutter 与 OpenHarmony 通信:Flutter Channel 使用指南
前端·javascript·flutter
利刃大大2 小时前
【Vue】Element-Plus快速入门 && Form && Card && Table && Tree && Dialog && Menu
前端·javascript·vue.js·element-plus
NEXT062 小时前
AI 应用工程化实战:使用 LangChain.js 编排 DeepSeek 复杂工作流
前端·javascript·langchain
念风零壹2 小时前
AI 时代的前端技术:从系统编程到 JavaScript/TypeScript
前端·ai