Python基本类型详解与应用场景(5)--字典

背景

对于很多 Python 初学者来说,搞懂我们每个数据的结构与作用是一件非常困难的事。

因此了解我们程序中各个基本类型的结构,表现方式,使用方法与应用是一件非常有必要的事。本文致力通过简单明了的语言来阐述基本类型字典的相关信息

介绍

字典(Dictionary)是一种无序的数据结构,用于存储键值对(key-value pairs)的集合。每个键(key)都是唯一的,而对应的值(value)可以重复。字典的特点是使用键来访问值,而不是使用索引。可以将字典看作是一本电话簿,其中每个人的名字对应一个电话号码,名字就是键,电话号码就是值。在 python 中我们通常用列表的英文dict来表示字典

字典的表现形式

字典的表现形式是一对花括号({})括起来的键值对,每个键值对由冒号分隔,每个键值对之间用逗号分隔。字典的键(key)必须是不可变类型,如字符串、数字、元组等,而值(value)可以是任意类型,如字符串、数字、列表、元组、甚至是另一个字典等。如下方代码所示:

my_dict = {
    
    'apple': 2, 'banana': 3, 'orange': 4}

在这个字典中,‘apple’、'banana’和’orange’是键,而2、3和4是相应的值。可以通过以下方式访问字典中的值:

print(my_dict['apple'])  # 输出2

可以通过以下方式修改字典中的值或添加新的键值对:

my_dict['pear'] = 5  # 添加一个新的键值对
my_dict['banana'] = 6  # 修改键为'banana'的值为6

可以使用以下方式删除字典中的键值对:

del my_dict['orange']  # 删除键为'orange'的键值对

字典的作用

  1. 存储键值对:字典可以存储任意数量的键值对,这些键值对可以是不同类型的数据,如字符串、数字、列表、元组、甚至是另一个字典等。这使得字典成为存储和组织数据的一种非常方便的方式。

  2. 快速访问:与列表或元组不同,字典中的元素是无序的,但是可以通过键(key)快速访问相应的值(value)。这使得字典成为一个非常快速和高效的数据结构,适用于需要快速查找和访问数据的应用场景。

  3. 适用于各种应用场景:字典在各种应用场景中都得到了广泛的应用。例如,可以使用字典来存储配置文件、记录用户信息、存储数据等等。

  4. 支持动态修改:字典是可变的,这意味着可以动态添加、删除和修改键值对。这使得字典成为一种非常灵活的数据结构,可以在运行时动态地改变字典的内容,以适应各种应用场景的需要。

访问字典值

访问字典里面的内容可以使用字典的键(key)来获取相应的值(value)。有以下两种常用的方法:

使用中括号([])来获取值
可以通过在中括号中指定键来获取相应的值。例如:

my_dict = {
    
    'apple': 2, 'banana': 3, 'orange': 4}
print(my_dict['apple'])  # 输出2

通过指定键’apple’来获取相应的值2。

如果尝试访问一个不存在的键,则会引发KeyError异常。例如:

print(my_dict['pear'])  # 抛出KeyError异常

使用get()方法来获取值:
可以使用get()方法来获取相应的值,如果指定的键不存在,则返回None或者指定的默认值。例如:

my_dict = {
    
    'apple': 2, 'banana': 3, 'orange': 4}
print(my_dict.get('apple'))  # 输出2
print(my_dict.get('pear'))  # 输出None
print(my_dict.get('pear', 0))  # 输出0

通过get()方法指定键来获取相应的值,如果指定的键不存在,则返回None;可以在get()方法中传入第二个参数来指定默认值,这里指定默认值为0。

总之,访问字典里面的内容可以使用字典的键来获取相应的值,可以使用中括号([])或者get()方法来实现。

使用

往字典中新增元素

直接赋值

可以通过直接赋值的方式向字典中添加新的键值对。例如:

my_dict = {
    
    'apple': 2, 'banana': 3, 'orange': 4}
my_dict['pear'] = 5
print(my_dict)

通过直接给字典的键’pear’赋值来添加新的键值对,输出结果为:

{
    
    'apple': 2, 'banana': 3, 'orange': 4, 'pear': 5}

使用update()方法

可以使用update()方法向字典中添加新的键值对,update()方法接受一个字典作为参数,将其合并到原始字典中。例如:

my_dict = {
    
    'apple': 2, 'banana': 3, 'orange': 4}
new_dict = {
    
    'pear': 5, 'kiwi': 6}
my_dict.update(new_dict)
print(my_dict)

通过update()方法将新的字典new_dict合并到原始字典my_dict中,输出结果为:

{
    
    'apple': 2, 'banana': 3, 'orange': 4, 'pear': 5, 'kiwi': 6}

删除字典中的值

使用del关键字

使用del关键字来删除字典中的键值对:

del my_dict[key]

其中,my_dict是要删除键值对的字典,key是要删除的键。例如:

my_dict = {
    
    'apple': 2, 'banana': 3, 'orange': 4}
del my_dict['banana']
print(my_dict)

使用del关键字删除字典中的键’banana’及其对应的值,输出结果为:

{
    
    'apple': 2, 'orange': 4}

使用pop()方法

使用pop()方法删除字典中的键值对,语法为:

my_dict.pop(key[, default])

其中,my_dict是要删除键值对的字典,key是要删除的键,default是可选的默认值,如果键不存在则返回默认值。例如:

my_dict = {
    
    'apple': 2, 'banana': 3, 'orange': 4}
my_dict.pop('banana')
print(my_dict)

使用pop()方法删除字典中的键’banana’及其对应的值,输出结果为:

{
    
    'apple': 2, 'orange': 4}

使用popitem()方法

使用popitem()方法随机删除字典中的一个键值对,语法为:

my_dict.popitem()

其中,my_dict是要删除键值对的字典。例如:

my_dict = {
    
    'apple': 2, 'banana': 3, 'orange': 4}
my_dict.popitem()
print(my_dict)

使用popitem()方法随机删除字典中的一个键值对,输出结果为:

{
    
    'apple': 2, 'banana': 3}

字典推导式

和列表推导式类似,Python中也支持字典推导式,可以快速创建字典。例如:

my_dict = {
    
    i: i * i for i in range(1, 6)}
print(my_dict)

在这个例子中,我们使用字典推导式创建了一个键为1到5,值为对应平方的字典,输出结果为:

{
    
    1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

获取字典所有的键

keys()方法
使用keys()方法可以获取字典中所有的键,返回一个包含所有键的视图对象,可以使用list()方法将其转换为列表。例如:

my_dict = {
    
    'apple': 2, 'banana': 3, 'orange': 4}
keys = my_dict.keys()
print(keys)
print(list(keys))

上面例子中,我们使用keys()方法获取字典my_dict中的所有键,输出结果为:

dict_keys(['apple', 'banana', 'orange'])
['apple', 'banana', 'orange']

获取字典所有值

values()方法
使用values()方法可以获取字典中所有的值,返回一个包含所有值的视图对象,并且可以使用list()方法将其转换为列表。例如:

my_dict = {
    
    'apple': 2, 'banana': 3, 'orange': 4}
values = my_dict.values()
print(values)
print(list(values))

上面这个例子中,使用values()方法获取字典my_dict中的所有值,输出结果为:

dict_values([2, 3, 4])
[2, 3, 4]

获取字典所有键值对

items()方法
使用items()方法获取字典中所有的键值对,返回一个包含所有键值对的视图对象,可以使用list()方法将其转换为列表。例如:

my_dict = {
    
    'apple': 2, 'banana': 3, 'orange': 4}
items = my_dict.items()
print(items)
print(list(items))

使用items()方法获取字典my_dict中的所有键值对,输出结果为:

dict_items([('apple', 2), ('banana', 3), ('orange', 4)])
[('apple', 2), ('banana', 3), ('orange', 4)]

清空字典

clear()方法
可以使用clear()方法清空字典中的所有键值对,返回一个空的字典。例如:

my_dict = {
    
    'apple': 2, 'banana': 3, 'orange': 4}
my_dict.clear()
print(my_dict)

在这个例子中,使用clear()方法清空字典my_dict中的所有键值对,输出结果为:

{
    
    }

深拷贝与浅拷贝

字典和列表一样也有深拷贝和浅拷贝的问题
浅拷贝
当使用字典的浅拷贝方法copy()时,实际上是创建了一个新的字典对象,但是该字典中的元素仍然是原字典中元素的引用。也就是说,新字典和原字典共享元素对象。

例如:

my_dict = {
    
    'a': [1, 2, 3], 'b': [4, 5, 6]}
new_dict = my_dict.copy()
my_dict['a'][0] = 100
print(my_dict)   # {'a': [100, 2, 3], 'b': [4, 5, 6]}
print(new_dict)  # {'a': [100, 2, 3], 'b': [4, 5, 6]}

在这个例子中,首先创建了一个包含两个键值对的字典my_dict,然后使用copy()方法创建了一个新的字典new_dict。接着将my_dict中的第一个元素中的第一个值改为100,发现new_dict中的第一个元素也发生了相应的改变。这是因为new_dict中的元素与my_dict中的元素引用的是同一个对象。

深拷贝
深拷贝会递归地将字典中的所有元素都复制一遍,从而创建一个全新的字典对象。可以使用copy模块中的deepcopy()方法来进行深拷贝。

例如:

my_dict = {
    
    'a': [1, 2, 3], 'b': [4, 5, 6]}
new_dict = copy.deepcopy(my_dict)
my_dict['a'][0] = 100
print(my_dict)   # {'a': [100, 2, 3], 'b': [4, 5, 6]}
print(new_dict)  # {'a': [1, 2, 3], 'b': [4, 5, 6]}

在这个例子中,使用copy模块中的deepcopy()方法创建了一个新的字典对象new_dict,将my_dict中的元素复制了一遍。接着将my_dict中的第一个元素中的第一个值改为100,发现new_dict中的第一个元素并没有发生任何改变,这是因为new_dict中的元素是全新的对象。

猜你喜欢

转载自blog.csdn.net/a914541185/article/details/129695503