当前位置:首页>python>《Python 从入门到精通》035|字典dict入门:键值对才是现实世界的数据结构

《Python 从入门到精通》035|字典dict入门:键值对才是现实世界的数据结构

  • 2026-10-11 08:31:12
《Python 从入门到精通》035|字典dict入门:键值对才是现实世界的数据结构

前面我们学了列表和元组。

它们都很有用,但有一个明显的问题:

它们更适合存一排数据,不太适合表达现实世界里的信息。

比如现在要表示一个学生的信息。

你当然可以这么写:

student = ['张三', 18, '男', 95]

这行代码能跑,也能存数据,但看着总觉得不踏实。

因为你得靠位置去猜:

第 0 个是姓名 第 1 个是年龄 第 2 个是性别 第 3 个是分数

今天你还记得,明天代码一长,自己都可能看晕。别人接手时更是要靠猜。

现实世界的数据,往往不是一排摆着的,而是一个个字段组成的。

姓名 对应 张三 年龄 对应 18 性别 对应 男 分数 对应 95

这种一一对应的关系,就是字典最擅长表达的东西。

所以你会发现,列表更像排队站好的人,字典更像填完整的一张信息表。

而真正接近现实项目的数据结构,往往就是字典。

一、什么是字典

字典是一种用来存储键值对的数据类型。

什么叫键值对?

简单说就是:

一个名字,对应一个值 一个标识,对应一个内容

比如:

student = {'name': '张三','age': 18,'gender': '男','score': 95}

这里:

name 是键张三 是值

age 是键18 是值

它的结构不是靠位置记数据,而是靠名字找数据。

这就非常符合人的思维方式。

你不会说:

把第 2 个信息拿给我

你会说:

把年龄给我看看

这就是字典的核心价值。

二、字典长什么样

字典用大括号表示:

person = {'name': '小王', 'age': 20}

最基本的格式是:

{键1: 值1, 键2: 值2, 键3: 值3}

注意几个细节:

字典外层是大括号 每一组数据用冒号连接 多组数据之间用逗号分隔

看一个更完整的例子:

book = {'title': 'Python 入门','author': '老李','price': 59.9}print(book)print(type(book))

输出:

{'title': 'Python 入门', 'author': '老李', 'price': 59.9}<class 'dict'>

dict 就是字典类型。

三、为什么说字典更像现实世界

这一点非常关键。

你以后学接口、爬虫、配置文件、前后端数据交互,都会频繁碰到字典。原因很简单:

现实里的信息,本来就不是一排数字,而是一组字段。

比如用户信息:

user = {'username': 'tom','password': '123456','email': 'tom@example.com'}

比如商品信息:

product = {'name': '机械键盘','price': 299,'stock': 120}

比如天气信息:

weather = {'city': '杭州','temp': 26,'type': '晴'}

你会发现,这些数据如果用列表来存,虽然也能存,但完全不直观。

而用字典,几乎一眼就能看懂。

所以字典的重要性,不只是语法层面,更是因为它更接近真实业务数据的样子。

四、字典中的键和值,到底是什么

字典里每一组数据都叫一个键值对。

格式是:

键: 值

键可以理解成标签、字段名、名称。 值就是这个标签对应的具体内容。

比如:

student = {'name': '张三','age': 18}

这里:

name 是标签张三 是内容

age 是标签18 是内容

你可以把字典想成一个带标签的盒子。 每个盒子外面都贴了名字,找东西时不是靠挨个数位置,而是直接按标签找。

这和列表差别很大。

列表是:

第几个位置放了什么

字典是:

某个名字对应什么值

这就是两种完全不同的组织方式。

五、如何取出字典里的值

字典最常见的操作,就是通过键来取值。

看代码:

student = {'name': '张三','age': 18,'score': 95}print(student['name'])print(student['age'])

输出:

张三18

你会发现,字典不是用索引取值,而是用键取值。

列表这样取:

students[0]

字典这样取:

student['name']

一个靠位置,一个靠名称。

后者明显更贴近现实。

六、字典为什么不支持索引

很多新手刚学字典时,最容易犯的错就是想当然地写成这样:

student = {'name': '张三','age': 18}print(student[0])

这会报错。

为什么?

因为字典不是按顺序编号来存数据的,它的核心思想不是第几个,而是谁对应谁。

也就是说,字典关心的是:

有没有这个键

而不是:

它排在第几个

所以你取值时,必须写对键名。

print(student['name'])

这是对的。

print(student[0])

这是错的。

这个思维一定要尽快切换过来,不然学字典会一直别扭。

七、空字典怎么写

定义空字典有两种常见方式。

第一种:

data = {}

第二种:

data = dict()

这两种都可以。

比如:

a = {}b = dict()print(type(a))print(type(b))

输出:

<class 'dict'><class 'dict'>

以后你在项目里两种写法都能看到。 新手阶段直接记 {}  就够了,写起来更直观。

八、字典里的值可以是什么类型

字典的值非常灵活,几乎可以是任何类型。

比如字符串、整数、浮点数、布尔值、列表,甚至另一个字典都可以。

看例子:

user = {'name': '小李','age': 22,'vip': True,'scores': [88, 92, 95],'address': {'city': '上海','area': '浦东'    }}print(user)

这说明字典特别适合表示复杂信息。

一个用户,不只是有名字和年龄,还可能有成绩、地址、订单、偏好设置。 这些都可以继续往里面装。

所以你会发现,字典不是只能存简单数据,它更像一个小型信息仓库。

九、字典里的键有什么要求

这部分要稍微认真一点,因为它涉及规则。

字典的键必须是不可变类型。

你现在先记常见结论就够了:

字符串可以当键 数字可以当键 元组通常也可以当键 列表不能当键

最常见的键,就是字符串。

比如:

student = {'name': '张三','age': 18}

这是最标准、最常见的写法。

为什么列表不能做键?

因为列表是可变的,而字典需要一个稳定、不乱变的键,才能快速找到对应值。

这个底层原理后面学到更深时你会明白。现阶段只要记住:

键要稳定 值可以灵活

就够了。

十、字典的键不能重复

这是字典一个非常重要的特点。

看代码:

student = {'name': '张三','age': 18,'name': '李四'}print(student)

输出:

{'name': '李四', 'age': 18}

你会发现,前面的 name: 张三 被后面的 name: 李四 覆盖了。

因为字典里,键必须唯一。

这也很好理解。

一张表里,字段名如果都叫一个名字,那程序就分不清你到底想取哪个。

所以:

键不能重复 值可以重复

比如下面这样是可以的:

data = {'a': 100,'b': 100,'c': 100}

不同的键,对应相同的值,没问题。

十一、字典是无序的吗

这个问题你可能会在不同教程里看到不同说法。

更准确一点地说:

字典不是靠索引取值的容器 但在现代 Python 里,它会保留插入顺序

也就是说:

data = {'name': '张三','age': 18,'city': '北京'}print(data)

打印出来时,通常就是你写进去的顺序。

但你不要因此把字典当列表用。 它的本质仍然是键值映射,不是按位置操作的序列。

这一点只要心里有数就行,别死抠概念。对新手最重要的是:

字典用键找值,不用位置找值。

十二、用字典表示一条完整信息,真的很舒服

来看一个对比。

如果用列表表示一本书:

book = ['Python 核心', '老周', 79.9, 300]

请问:

哪一个是价格 哪一个是页数 哪一个是作者

虽然你能记住,但很费脑子。

再看字典写法:

book = {'title': 'Python 核心','author': '老周','price': 79.9,'pages': 300}

这就舒服多了。

以后你写代码时,一个非常重要的判断标准就是:

当前这组数据,如果不用注释就看不懂,那很可能应该考虑字典。

因为字典天生自带说明性。

十三、字典的典型场景有哪些

你现在可能还没进项目,但提前建立场景感很有必要。

下面这些地方,字典特别常见。

1. 存用户信息

user = {'username': 'admin','password': '123456'}

2. 存配置参数

config = {'host': '127.0.0.1','port': 3306,'user': 'root'}

3. 存商品信息

product = {'name': '显示器','price': 899,'brand': 'AOC'}

4. 存接口返回数据

很多接口返回的内容,本质上就是字典。

response = {'code': 200,'msg': 'success','data': {'name': '小明','age': 18    }}

等你后面学爬虫、Web、接口开发时,会发现字典的出场率非常高。

十四、字典和列表到底怎么区分

这也是新手经常问的问题。

记一个简单判断方法:

如果你存的是一组同类数据,通常用列表 如果你存的是一个对象的多个属性,通常用字典

比如一组成绩:

scores = [90, 88, 95, 76]

这是一组同类数据,适合列表。

比如一个学生的信息:

student = {'name': '小明','age': 17,'score': 95}

这是一个对象的多个属性,适合字典。

再进一步:

多个学生,往往是列表套字典。

students = [    {'name': '张三', 'age': 18},    {'name': '李四', 'age': 19},    {'name': '王五', 'age': 17}]

这种结构你以后会见得非常多。

外层列表,表示很多条记录 内层字典,表示每条记录的详细字段

这已经非常接近真实项目的数据组织方式了。

十五、字典取值时要小心一个坑

看这段代码:

student = {'name': '张三','age': 18}print(student['score'])

这会报错。

因为 score 这个键根本不存在。

也就是说,字典取值时,你必须保证这个键真的有。

初学阶段你先记住这个现象就行。 后面我们讲字典常见操作时,会专门讲更安全的取值方式。

现在你只需要知道:

取值时,键名必须写对 不存在的键会报错

所以平时写代码时,字段名别写错,别少字母,别自己换名字。

十六、字典也可以嵌套

现实数据往往不是平的,而是一层套一层。

比如一个学生,除了姓名和年龄,还有家庭住址。住址里面还有城市和区县。

这时候就可以嵌套字典。

student = {'name': '张三','age': 18,'address': {'city': '杭州','area': '西湖区'    }}print(student['address'])print(student['address']['city'])

输出:

{'city': '杭州', 'area': '西湖区'}杭州

这就是字典特别强的地方:

它不只是能装简单值,还能逐层组织复杂信息。

你可以把它理解成一个抽屉柜。 大抽屉里还能再分小抽屉。

十七、一个非常生活化的理解方式

把字典想成手机通讯录,就很好懂了。

联系人名字,就是键。 对应的手机号,就是值。

比如:

contacts = {'张三': '13800000001','李四': '13800000002','王五': '13800000003'}

你找号码时,不会说给我第 2 个号码。 你会说,把李四的号码给我。

这就是字典的思维:

按名字找内容 不是按位置找内容

如果你能把这一点真正吃透,字典就不再抽象了。

十八、练习题:先把字典用顺手

下面这些小练习,建议你自己敲一遍。

1. 定义一个字典,保存你的姓名、年龄、城市

参考答案:

info = {'name': '小明','age': 20,'city': '苏州'}print(info)

2. 取出姓名和年龄

print(info['name'])print(info['age'])

3. 定义一个商品字典,包含商品名、价格、库存

product = {'name': '鼠标','price': 59.9,'stock': 300}print(product)

4. 定义一个嵌套字典,保存学生和地址信息

student = {'name': '小红','age': 17,'address': {'city': '南京','area': '鼓楼区'    }}print(student['address']['city'])

这些练习不复杂,但很关键。 字典这个东西,光看很容易懂,真写的时候最容易错在字段名上。所以一定要自己手敲。

十九、本章小结

这一章最重要的,不是背会 dict 这个单词,而是建立一种新的数据组织思维。

列表解决的是一组数据怎么放。 字典解决的是一条信息怎么表达。

你要记住下面几点:

字典用大括号表示 字典存的是键值对 通过键来取值,不靠索引 键必须唯一 值可以是任意类型 字典特别适合描述现实中的对象信息

如果说列表更像一排数据, 那么字典就是一张带字段的信息表。

而程序一旦开始接近真实业务,字典的重要性就会迅速上升。

下一章我们继续讲 字典的常见操作:增删改查与遍历。 到那一章,你就会真正开始把字典用起来,而不是只会定义、只会看。

最新文章

随机文章