当前位置:首页>python>Python第八天:字典用“键值对”存数据,查值比列表快10倍,对比C语言太高效

Python第八天:字典用“键值对”存数据,查值比列表快10倍,对比C语言太高效

  • 2026-09-09 16:17:58
Python第八天:字典用“键值对”存数据,查值比列表快10倍,对比C语言太高效

大家好,我是一个工作20多年的老程序员,把自己工作中积累的经验慢慢给大家分享

-begin-

当我们需要存储“键值对”形式的数据时,比如学生的学号对应姓名、商品的ID对应价格,列表就不太方便了——总不能靠索引去记住哪个位置存的是学号、哪个是姓名。字典(Dictionary)正是为这种“一一对应”的关系设计的,它通过“键(Key)”来快速查找对应的“值(Value)”,就像查字典时用拼音查汉字一样高效。C语言中没有专门的字典结构,通常需要用结构体和数组模拟,而Python的字典直接内置了这种功能,操作起来非常方便。

第八天:字典(Dictionary)——键值对应的数据“地图”

Python例子:

# 创建字典(用大括号{},键值对用冒号:连接,键值对之间用逗号分隔)

student = {

   "id": 1001,

   "name": "张三",

   "age": 18,

   "is_male": True

}

# 访问字典中的值(通过键访问)

print("学生姓名:", student["name"])  # 张三

print("学生年龄:", student["age"])   # 18

# 修改值(通过键修改)

student["age"] = 19  # 把年龄从18改成19

print("修改后的年龄:", student["age"])  # 19

# 添加新的键值对

student["score"] = 90  # 新增“score”键,值为90

print("添加成绩后的字典:", student)

# 删除键值对

del student["is_male"]  # 删除“is_male”键及对应的值

print("删除后的字典:", student)

# 查看所有的键和值

print("所有的键:", student.keys())    # dict_keys(['id', 'name', 'age', 'score'])

print("所有的值:", student.values())  # dict_values([1001, '张三', 19, 90])

# 遍历字典(默认遍历键)

print("遍历所有键值对:")

for key in student:

   print(key, ":", student[key])

运行结果:

学生姓名: 张三

学生年龄: 18

修改后的年龄: 19

添加成绩后的字典: {'id': 1001, 'name': '张三', 'age': 19, 'is_male': True, 'score': 90}

删除后的字典: {'id': 1001, 'name': '张三', 'age': 19, 'score': 90}

所有的键: dict_keys(['id', 'name', 'age', 'score'])

所有的值: dict_values([1001, '张三', 19, 90])

遍历所有键值对:

id : 1001

name : 张三

age : 19

score : 90

详细分析:

1.创建字典:用{}包裹键值对,格式为键: 值。键可以是字符串、数字等不可变类型(不能用列表当键),值可以是任何类型(整数、字符串、列表等),且同一个字典中键必须唯一(重复的键会被后面的覆盖)。
2.访问值:通过字典名[键]的方式获取对应的值。如果访问不存在的键,会报错,所以可以先用键 in 字典名判断键是否存在:

if "score" in student:

   print("成绩存在:", student["score"])

else:

   print("成绩不存在")

3.修改和添加:
◦如果键已存在,字典名[键] = 新值会修改对应的值。
◦如果键不存在,这个操作会新增一个键值对。
4.删除键值对:del 字典名[键]会删除指定的键及对应的值,删除后访问该键会报错。
5.常用方法:
◦keys():返回所有键的集合。
◦values():返回所有值的集合。
◦items():返回所有键值对的集合(以元组形式),遍历更方便:

for key, value in student.items():

   print(key, ":", value)  # 效果和之前遍历相同,但更直观

对比C语言:

C语言没有字典,需用结构体数组模拟类似功能:

#include <stdio.h>

#include <string.h>

// 定义结构体表示键值对(假设键是字符串,值是整数)

typedef struct {

   char key[20];

   int value;

} KeyValue;

int main() {

   // 用结构体数组模拟字典

   KeyValue student[4];

   // 手动赋值键值对

   strcpy(student[0].key, "id");

   student[0].value = 1001;

   strcpy(student[1].key, "age");

   student[1].value = 18;

   // ... 其他键值对

   // 访问值(需要遍历查找键)

   int target_age = -1;

   for (int i = 0; i < 4; i++) {

       if (strcmp(student[i].key, "age") == 0) {

           target_age = student[i].value;

           break;

       }

   }

   printf("学生年龄:%d\n", target_age);  // 18

   return 0;

}

主要区别:

6.访问效率:Python字典通过键直接访问值,速度极快(类似哈希表);C语言模拟的字典需要遍历查找,数据量大时效率很低。
7.灵活性:Python字典的键值对可以动态增删,类型灵活;C语言结构体数组需要提前定义大小和类型,修改非常麻烦。
8.操作便捷性:Python字典有keys()、values()等方法,遍历和管理简单;C语言需要手动写循环处理,代码冗余。
-end-

如果文章对你有提升,帮忙点赞,分享,关注。非常感谢

最新文章

随机文章