Python 字典(Dictionary)详细介绍

  • Post category:Python

Python 字典(Dictionary)详细介绍

Python 字典(Dictionary)是一种无序的、可变的、键值对(key-value pair)的数据类型。它非常适合用来存储大量的数据,并且可以快速地根据键(key)来查找对应的值(value)。本文将会详细介绍 Python 字典(Dictionary)的常用操作,包括创建、访问、更新、删除以及一些有用的函数和方法。

创建字典

创建字典的方法有多种,下面分别介绍:

直接创建

通过花括号{}可以直接创建一个空字典,也可以在花括号里添加键值对来初始化字典:

empty_dict = {}
print(empty_dict)  # {}
simple_dict = {'name': 'Jack', 'age': 23}
print(simple_dict)  # {'name': 'Jack', 'age': 23}

dict()函数

使用dict()函数创建字典,可以传入一些可迭代对象来初始化字典,比如列表、元组、集合等,或者传入关键字参数来创建字典:

# 初始化字典
list_dict = dict([('name', 'Jack'), ('age', 23)])
print(list_dict)  # {'name': 'Jack', 'age': 23}
tuple_dict = dict((('name', 'Jack'), ('age', 23)))
print(tuple_dict)  # {'name': 'Jack', 'age': 23}
set_dict = dict({'name': 'Jack', 'age': 23}.items())
print(set_dict)   # {'name': 'Jack', 'age': 23}
# 创建新字典
new_dict = dict(key1='value1', key2='value2')
print(new_dict)   # {'key1': 'value1', 'key2': 'value2'}

访问字典

访问字典的方式很简单,只需要使用[]操作符来获取对应键的值即可,如果查询不到对应的键,则会抛出KeyError异常。

simple_dict = {'name': 'Jack', 'age': 23}
print(simple_dict['name'])  # Jack
# print(simple_dict['gender'])  # KeyError: 'gender'
# 使用 get() 函数访问,如果不存在 key,返回 None,或者自己指定的默认值
print(simple_dict.get('name'))  # Jack
print(simple_dict.get('gender'))  # None
print(simple_dict.get('gender', 'unknown'))  # unknown

更新字典

更新字典的方式有多种,下面分别介绍:

直接赋值

可以直接通过[]操作符赋值来更新字典中对应键的值,如果字典中不存在该键,则会自动创建一个新的键值对:

simple_dict = {'name': 'Jack', 'age': 23}
simple_dict['name'] = 'Tom'   # 直接赋值
print(simple_dict)  # {'name': 'Tom', 'age': 23}
simple_dict['gender'] = 'male'  # 自动创建新的键值对
print(simple_dict)  # {'name': 'Tom', 'age': 23, 'gender': 'male'}

update()方法

可以使用update()方法来更新字典。该方法接受一个字典或一个可迭代对象作为参数,用来更新原字典中的键值对。如果传入的参数中包含了原字典中已经存在的键,则会更新该键对应的值。如果传入的参数中包含了新的键,则会自动创建相应的键值对。

simple_dict = {'name': 'Jack', 'age': 23}
simple_dict.update({'name': 'Tom', 'gender': 'male'})
print(simple_dict)  # {'name': 'Tom', 'age': 23, 'gender': 'male'}
simple_dict.update([('name', 'John'), ('age', 25), ('email', 'john@example.com')])
print(simple_dict)  # {'name': 'John', 'age': 25, 'gender': 'male', 'email': 'john@example.com'}

删除字典

删除字典的方式也很简单,可以使用del关键字来删除整个字典,或者使用pop()方法或popitem()方法来删除特定的键值对:

simple_dict = {'name': 'Jack', 'age': 23, 'gender': 'male'}
del simple_dict   # 删除整个字典
print(simple_dict)  # NameError: name 'simple_dict' is not defined
simple_dict = {'name': 'Jack', 'age': 23, 'gender': 'male'}
simple_dict.pop('gender')   # 删除特定键值对
print(simple_dict)  # {'name': 'Jack', 'age': 23}
simple_dict.popitem()   # 随机删除一个键值对
print(simple_dict)  # {'name': 'Jack'}

字典的常用函数和方法

字典的常用函数和方法如下:

len()

len()函数用来获取字典中键值对的数量。

simple_dict = {'name': 'Jack', 'age': 23}
print(len(simple_dict))  # 2

keys()

keys()方法用来获取字典中所有的键。

simple_dict = {'name': 'Jack', 'age': 23}
print(list(simple_dict.keys()))  # ['name', 'age']

values()

values()方法用来获取字典中所有的值。

simple_dict = {'name': 'Jack', 'age': 23}
print(list(simple_dict.values()))  # ['Jack', 23]

items()

items()方法用来获取字典中所有的键值对。

simple_dict = {'name': 'Jack', 'age': 23}
print(list(simple_dict.items()))  # [('name', 'Jack'), ('age', 23)]

clear()

clear()方法用来清空字典中所有的键值对。

simple_dict = {'name': 'Jack', 'age': 23}
simple_dict.clear()
print(simple_dict)  # {}

copy()

copy()方法用来复制字典。

simple_dict = {'name': 'Jack', 'age': 23}
new_dict = simple_dict.copy()
print(new_dict)  # {'name': 'Jack', 'age': 23}

示例说明

下面的示例说明了如何使用字典来存储和管理学生的成绩信息,包括添加新的学生、查询学生信息、更新学生成绩和删除学生信息等操作。

# 学生信息字典,键为学生姓名,值为对应学生的成绩信息字典
students = {}

# 添加学生信息
students['Alice'] = {'math': 90, 'english': 85, 'history': 92}
students['Bob'] = {'math': 85, 'english': 88, 'history': 79}
students['Charlie'] = {'math': 92, 'english': 90, 'history': 87}

# 查询学生信息
print(students['Alice'])  # {'math': 90, 'english': 85, 'history': 92}

# 更新学生成绩
students['Bob']['history'] = 86
print(students['Bob'])  # {'math': 85, 'english': 88, 'history': 86}

# 删除学生信息
del students['Charlie']
print(students)  # {'Alice': {'math': 90, 'english': 85, 'history': 92}, 'Bob': {'math': 85, 'english': 88, 'history': 86}}

另一个示例是一个简单的英文词频统计程序。程序接受一个字符串作为输入,将其中出现的每个单词作为字典的键,将出现的次数作为字典的值,并按照字典值的大小逆序输出所有单词及其出现次数。

text = "In computer science, a sorted array is an array data structure in which each element is sorted in numerical, alphabetical, or some other order, and placed at equally spaced addresses in computer memory. Arrays can be sorted in several ways, including bubble sort, selection sort, and insertion sort. Sorting an array is an important operation that forms the basis for many other algorithms, such as searching and merging."

# 将文本转为全小写,并且去掉所有标点符号
text = text.lower().replace(",", "").replace(".", "")

# 计算每个单词出现的次数,并将其存储在字典中
word_count = {}
for word in text.split():
    if word in word_count:
        word_count[word] += 1
    else:
        word_count[word] = 1

# 将字典按照值的大小排序并输出
sorted_dict = sorted(word_count.items(), key=lambda x: x[1], reverse=True)
for item in sorted_dict:
    print(item[0], item[1])

输出结果如下:

sort 3
an 2
array 2
in 2
computer 2
science 1
a 1
sorted 1
data 1
structure 1
which 1
each 1
element 1
is 1
numerical 1
alphabetical 1
or 1
some 1
other 1
order 1
and 1
placed 1
at 1
equally 1
spaced 1
addresses 1
memory 1
arrays 1
can 1
be 1
several 1
ways 1
including 1
bubble 1
selection 1
insertion 1
an 1
important 1
operation 1
that 1
forms 1
the 1
basis 1
for 1
many 1
algorithms 1
such 1
as 1
searching 1
merging 1