欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > 09 Python字典揭秘:数据的高效存储

09 Python字典揭秘:数据的高效存储

2025/5/1 23:44:32 来源:https://blog.csdn.net/cx18333/article/details/147641464  浏览:    关键词:09 Python字典揭秘:数据的高效存储

文章目录

    • 一.字典是什么
      • 1.字典的特点
    • 二.字典的创建和使用
    • 三.字典的操作
      • 1.访问元素
      • 2.修改元素
      • 3.删除元素
      • 4.遍历字典
      • 5.成员运算
    • 四.字典方法
      • 1.获取字典中的指定元素
      • 2.获取字典中的元素
      • 3.字典合并
      • 4.删除元素

一.字典是什么

在 Python 中,字典(dict)是一种强大且重要的可变容器类型,它以键值对keyvalue)的形式存储数据。字典通过键(key)来访问对应的值(value),键在字典中是唯一的,这意味着一个字典中不能有重复的键。可以把字典想象成一个现实中的字典,键就像是字典里的单词,而值就是这个单词对应的解释。
在 Python 中的其他容器类型数据(列表,元组,集合)这些仍然不足以帮助我们解决所有的问题。例如,我们需要一个变量来保存一个人的多项信息,包括:姓名、年龄、身高、体重、家庭住址、本人手机号、紧急联系人手机号,此时你会发现,我们之前学过的列表、元组和集合类型都不够好使。

person1 = ['张三', 18, 183, 60, '浙江省杭州市西湖区人民大道一号', '15517893416', '18636951478']
person2 = ('张三', 18, 183, 60, '浙江省杭州市西湖区人民大道一号', '15517893416', '18636951478')
person3 = {'张三', 18, 183, 60, '浙江省杭州市西湖区人民大道一号', '15517893416', '18636951478'}

集合肯定是最不合适的,因为集合中不能有重复元素,如果一个人的年龄和体重刚好相同,那么集合中就会少一项信息;同理,如果这个人的手机号和紧急联系人手机号是相同的,那么集合中又会少一项信息。另一方面,虽然列表和元组可以把一个人的所有信息都保存下来,但是当你想要获取这个人的手机号或家庭住址时,你得先知道他的手机号是列表或元组中的第几个元素。总之,在遇到上述的场景时,列表、元组、集合都不是最合适的选择,此时我们需要字典(dictionary)类型,这种数据类型最适合把相关联的信息组装到一起,可以帮助我们解决 Python 程序中为真实事物建模的问题。

1.字典的特点

  • 无序性:在 Python 3.6 之前,字典是无序的,也就是说字典里键值对的存储顺序和你添加它们的顺序可能不同。不过从 Python 3.6 开始,字典会保持插入顺序,即键值对会按照你添加的顺序排列。
  • 键的唯一性:字典里的每个键必须是独一无二的。如果尝试使用已有的键来添加新的值,那么原来的值会被新值覆盖。
  • 键的不可变性:键必须是不可变的数据类型,比如整数、浮点数、字符串、元组等。这是因为字典是基于哈希表实现的,而不可变类型才能计算出固定的哈希值,以确保键的唯一性和查找效率。值可以是任意数据类型,包括列表、字典等可变类型。

二.字典的创建和使用

Python 中创建字典可以使用{}字面量语法,字典的{}中的元素是以键值对的形式存在的,每个元素由:分隔的两个值构成,:前面是键,:后面是值。通过键来访问对应的值,如果键不存在,会引发 KeyError 异常。可以使用 get() 方法来避免这种异常,当键不存在时,get() 方法会返回指定的默认值(如果没有指定默认值,则返回 None)


# 方式一:使用花括号和键值对直接创建
empty_dict = {}  # 创建一个空字典
student = {'name': 'Alice', 'age': 20, 'gender': 'female'}
print(student)# 方式二:使用 dict() 构造函数
person = dict(name='Bob', age=25, occupation='Engineer')
print(person)# 方式三:使用键值对序列创建
items = [('fruit', 'apple'), ('color', 'red')]
food = dict(items)
print(food)# 方式四:使用字典推导式创建
squares = {x: x**2 for x in range(1, 6)}
print(squares)

三.字典的操作

1.访问元素

通过键来访问对应的值,如果键不存在,会引发 KeyError 异常。可以使用 get() 方法来避免这种异常,当键不存在时,get() 方法会返回指定的默认值(如果没有指定默认值,则返回 None)。

student = {'name': 'Alice', 'age': 20, 'gender': 'female'}
print(student['name'])  # 输出: Alice
print(student.get('score', 0))  # 键 'score' 不存在,返回默认值 0

2.修改元素

直接通过键来修改对应的值,如果键不存在,则会添加一个新的键值对。

student = {'name': 'Alice', 'age': 20, 'gender': 'female'}
student['age'] = 21  # 修改 'age' 对应的值
student['score'] = 90  # 添加新的键值对
print(student)

3.删除元素

可以使用 del 语句或 pop() 方法来删除键值对。pop() 方法在删除键值对的同时会返回对应的值,如果键不存在,还可以指定默认值避免异常。

student = {'name': 'Alice', 'age': 20, 'gender': 'female'}
del student['age']  # 删除 'age' 键值对
score = student.pop('score', 0)  # 尝试删除 'score' 键值对,不存在则返回默认值 0
print(student)
print(score)

4.遍历字典

可以使用不同的方式来遍历字典中的键、值或键值对

student = {'name': 'Alice', 'age': 20, 'gender': 'female'}# 遍历键
for key in student.keys():print(key)# 遍历值
for value in student.values():print(value)# 遍历键值对
for key, value in student.items():print(key, ":", value)

5.成员运算

person = {'name': '王大锤', 'age': 18, 'height': 183, 'weight': 60, 'addr': '浙江省杭州市西湖区人民大道一号'}# 成员运算
print('name' in person)  # True
print('tel' in person)   # False

四.字典方法

1.获取字典中的指定元素

字典类型的方法基本上都跟字典的键值对操作相关,其中get方法可以通过键来获取对应的值。跟索引运算不同的是,get方法在字典中没有指定的键时不会产生异常,而是返回None或指定的默认值

person = {'name': '张三', 'age': 18, 'height': 183, 'addr': '浙江省杭州市西湖区'}
print(person.get('name'))       # 张三
print(person.get('sex'))        # None
print(person.get('sex', True))  # True

2.获取字典中的元素

如果需要获取字典中所有的键,可以使用keys方法;如果需要获取字典中所有的值,可以使用values方法。字典还有一个名为items的方法,它会将键和值组装成二元组,通过该方法来遍历字典中的元素也是非常方便的。

person = {'name': '张三', 'age': 18, 'height': 183}
print(person.keys())    # dict_keys(['name', 'age', 'height'])
print(person.values())  # dict_values(['张三', 18, 183])
print(person.items())   # dict_items([('name', '张三'), ('age', 18), ('height', 183)])
for key, value in person.items():print(f'{key}:\t{value}')

3.字典合并

字典的update方法实现两个字典的合并操作。例如,有两个字典xy,当执行x.update(y)操作时,xy相同的键对应的值会被y中的值更新,而y中有但x中没有的键值对会直接添加到x中,代码如下所示。

person1 = {'name': '张三', 'age': 55, 'height': 183}
person2 = {'age': 18, 'addr': '浙江省杭州市西湖区'}
person1.update(person2)
print(person1)  # {'name': '张三', 'age': 18, 'height': 183, 'addr': '浙江省杭州市西湖区'}

如果使用的 Python 版本是 3.9 及以上的版本,也可以使用|运算符来完成同样的操作,代码如下所示。

person1 = {'name': '张三', 'age': 55, 'height': 183}
person2 = {'age': 18, 'addr': '浙江省杭州市西湖区'}
person1 |= person2
print(person1)  # {'name': '张三', 'age': 18, 'height': 183, 'addr': '浙江省杭州市西湖区'}

4.删除元素

可以通过poppopitem方法从字典中删除元素
pop会返回(获得)键对应的值,但是如果字典中不存在指定的键,会引发KeyError错误;
popitem在删除元素时,会返回(获得)键和值组成的二元组。
字典的clear方法会清空字典中所有的键值对,

person = {'name': '张三', 'age': 18, 'height': 183, 'addr': '浙江省杭州市西湖区'}
print(person.pop('age'))  # 18
print(person)             # {'name': '张三', 'height': 183, 'addr': '浙江省杭州市西湖区'}
print(person.popitem())   # ('addr', '浙江省杭州市西湖区')
print(person)             # {'name': '张三', 'height': 183}
person.clear()
print(person)             # {}

跟列表一样,从字典中删除元素也可以使用del关键字,在删除元素的时候如果指定的键索引不到对应的值,一样会引发KeyError错误

person = {'name': '张三', 'age': 18, 'height': 183, 'addr': '浙江省杭州市西湖区'}
del person['age']
del person['addr']
print(person)  # {'name': '张三', 'height': 183}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词