1.字典的定义与特点
字典是Python中一种基本数据结构,本质上是一种键(key)值(value)对形式的无序集合,用大括号"{}"括起来,每个键值对之间使用逗号分隔。其中,键必须是不可变类型,如字符串、数字、元组,值可以是任意类型。下面通过一个字典的定义来说明:
#定义一个简单的字典
dict1 = {'apple':3, 'orange':2.5, 'pear':4.1}
print(dict1)
其中,'apple'、'orange'、'pear'分别是键,3、2.5、4.1分别是对应键的值。字典的特点有以下几个方面:
1.一个键只能对应一个值,但是一个值可以对应多个键;
2.字典是无序的,只能通过键来访问对应的值;
3.字典中的键必须是不可变类型,如字符串、数字、元组;
4.字典中的值可以是任何类型,包括基本类型和自定义类型。
2.字典的基本操作
2.1 字典的访问
可以使用键来访问字典中的值,如果键不存在,则会报错。以下是一个字典的访问示例:
#访问字典中的值
dict1 = {'apple':3, 'orange':2.5, 'pear':4.1}
print(dict1['apple']) #输出3
在上面的代码中,使用了"[]"操作符来访问字典中的值,并输出了键'apple'对应的值3。
2.2 字典的添加和修改
可以通过赋值操作来添加和修改字典中的键值对,如下面这个例子:
#添加和修改字典中的键值对
dict1 = {'apple':3, 'orange':2.5, 'pear':4.1}
dict1['banana'] = 1.5 #添加新的键值对
dict1['pear'] = 5.2 #修改原有键的值
print(dict1)
在上面的代码中,先创建了一个字典dict1,然后通过赋值操作添加了一个新的键值对'banana':1.5,接着修改了已有键'pear'所对应的值。
2.3 字典的删除
可以使用"del"语句删除字典中的键值对,如下面这个例子所示:
#删除字典中的键值对
dict1 = {'apple':3, 'orange':2.5, 'pear':4.1}
del dict1['orange'] #删除指定的键值对
print(dict1)
在上面的代码中,首先创建了一个字典dict1,然后使用"del"语句删除了指定键'orange'对应的键值对。执行结果为{'apple': 3, 'pear': 4.1}。
3.字典的常用方法
3.1 字典的遍历
可以使用for循环遍历字典中的所有键值对,如下面这个例子所示:
#遍历字典中的所有键值对
dict1 = {'apple':3, 'orange':2.5, 'pear':4.1}
for key in dict1: #遍历字典中的所有键
print(key, dict1[key])
在上面的代码中,用一个for循环遍历字典中的所有键,并输出每个键和对应的值。
3.2 字典的常用方法
Python中的字典还提供了一些常用的方法,包括:
1.len(dict):返回字典中键值对的数量;
2.dict.copy():返回一个字典的浅拷贝;
3.dict.fromkeys(seq[,value]):创建一个新字典,以序列seq中的元素作为键,value作为对应键的初始值;
4.dict.get(key[,default]):返回字典中指定键的值,如果不存在,则返回默认值,默认值可以在函数参数中指定;
5.dict.items():返回字典中所有的键值对;
6.dict.keys():返回字典中所有的键;
7.dict.pop(key[,default]):删除字典中指定键的键值对,并返回对应的值,如果指定键不存在,则返回默认值;
8.dict.popitem():随机删除字典中的一对键值对,并返回这对键值对;
9.dict.setdefault(key[,default]):和get()方法类似,但是如果指定键不存在,则会在字典中添加一个默认值,而不是返回None;
10.dict.update(dict2):将dict2中的键值对更新到字典中,如果有相同的键,则覆盖原有键的值;
11.dict.values():返回字典中所有的值。
下面通过一个例子来演示字典的常用方法:
#字典常用方法演示
dict1 = {'apple':3, 'orange':2.5, 'pear':4.1}
print(len(dict1)) #输出3,字典中有3个键值对
dict2 = dict1.copy() #复制dict1并赋值给dict2
print(dict2) #输出{'apple': 3, 'orange': 2.5, 'pear': 4.1}
seq = ('apple', 'banana', 'pear')
dict3 = dict.fromkeys(seq) #创建一个新字典
print(dict3) #输出{'apple': None, 'banana': None, 'pear': None}
print(dict1.get('apple')) #输出3
print(dict1.items()) #输出dict_items([('apple', 3), ('orange', 2.5), ('pear', 4.1)])
print(dict1.keys()) #输出dict_keys(['apple', 'orange', 'pear'])
print(dict1.pop('orange')) #输出2.5
print(dict1) #输出{'apple': 3, 'pear': 4.1}
print(dict1.popitem()) #输出('pear', 4.1)
print(dict1) #输出{'apple': 3}
dict1.setdefault('banana', 1.5) #添加新键'banana'并赋值1.5
print(dict1) #输出{'apple': 3, 'banana': 1.5}
dict1.update({'orange':2.8, 'pear':4.7}) #更新字典
print(dict1) #输出{'apple': 3, 'banana': 1.5, 'orange': 2.8, 'pear': 4.7}
print(dict1.values()) #输出dict_values([3, 1.5, 2.8, 4.7])
在上面的代码中,先创建了一个字典dict1,然后使用了不同的方法来模拟字典的常见操作,如添加、修改、删除等,最后输出了字典中的所有值。
4.字典的应用场景
字典是Python中非常常用的一种数据结构,特别适用于存储可变的数据集合,例如散列表、映射表等。字典还常用于存储配置文件、路由表、数据库查询结果等,以及解决一些实际问题。下面分别给出几个具体的应用场景。
4.1 存储配置文件
在开发软件时,通常需要在某个地方存储一些配置信息,例如数据库的连接信息、日志的格式、调试模式等。字典非常适合用于存储这些信息,如下面这个例子所示:
#存储配置文件信息
config = {'debug': True,
'log_format': 'verbose',
'db': {'host':'localhost', 'port':3306, 'user':'root', 'password':''}}
print(config['debug']) #输出True
print(config['log_format']) #输出verbose
print(config['db']['port']) #输出3306
在上面的代码中,使用了一个具有嵌套结构的字典来存储配置信息,可以通过键来访问相应的值。例如,'db':['host']表示数据库连接的主机地址。
4.2 统计字符串中各个字符的出现次数
字典还可以用于统计字符串中各个字符的出现次数。下面是一个例子:
#统计字符串中各个单词的出现次数
str1 = 'a b c d e f g h i a b c d e f g h'
arr = str1.split()
word_count = {}
for word in arr:
if word in word_count:
word_count[word] += 1
else:
word_count[word] = 1
print(word_count)
在上面的代码中,首先创建了一个字符串str1,并将其转换为一个单词列表arr。接着,使用一个for循环遍历列表arr中的所有单词,并根据单词是否存在于字典word_count中来统计出现次数。最后,输出字典中所有的键值对,即所有单词出现的次数。
4.3 交换字典中的键和值
如果需要将字典中的键和值互换,可以通过以下方法实现:
#交换字典中的键和值
dict1 = {'apple':3, 'orange':2.5, 'pear':4.1}
dict2 = {value:key for key,value in dict1.items()}
print(dict1) #输出{'apple': 3, 'orange': 2.5, 'pear': 4.1}
print(dict2) #输出{3: 'apple', 2.5: 'orange', 4.1: 'pear'}
在上面的代码中,使用了一个字典推导式来创建新字典dict2,其键和值分别来自原始字典dict1的值和键。例如,dict1[‘apple’]: 3在新字典中对应的键值对是3: ‘apple’。