在Python编程中,掌握高效的数据组织和程序构建思想至关重要。字典作为一种强大的键值对数据结构,能帮助我们灵活地存储和管理数据;而面向对象编程则为构建复杂、可维护的软件系统提供了坚实的框架。本文将深入讲解字典的核心操作与面向对象编程的基础知识,并通过代码示例带你快速上手。
学习目标
- 字典
- 能够创建字典,并使用键值对存储和访问数据。
- 掌握字典的常见操作,如添加键值对、删除键值对(
pop())、遍历字典等。
- 面向对象编程基础
- 理解类和对象的概念,能够定义简单的类,并创建对象。
- 掌握类的构造函数(
__init__())的使用,用于初始化对象的属性。
字典学习
1. 创建字典
在Python中有多种方式可以创建字典。
-
直接使用花括号 {} 创建
# 创建一个简单的字典
student = {
“name”: “运维阿生”,
“age”: 66,
“major”: “计算机科学”
}
在这个例子中,“name”、“age”和“major”是键,而“运维阿生”、66和“计算机科学”分别是对应的值。我们可以通过键来访问字典中的值,就像这样:
print(student[“name”]) # 输出:运维阿生
-
使用 dict() 构造函数创建
# 通过传入关键字参数创建字典
person = dict(name=“ASheng”, age=66, city=“China”)
print(person)
# 通过传入可迭代对象(如元组列表)创建字典
data = [(“key1”, 1), (“key2”, 2), (“key3”, 3)]
new_dict = dict(data)
print(new_dict)
dict()构造函数可以接受不同形式的参数来创建字典。第一种方式是使用关键字参数,第二种方式是传入一个包含键值对元组的可迭代对象。
2. 使用键值对存储和访问数据
-
存储数据
可以通过为不存在的键赋值来向字典中添加新的键值对,这是实现灵活数据存储和管理的常用方式。
student = {“name”: “ASheng”, “age”: 66}
student[“gender”] = “Female”
print(student)
这里,我们为student字典添加了一个新的键“gender”,并将其值设置为“Female”。
-
访问数据
可以使用方括号[]或者get()方法来访问字典中的值。
student = {“name”: “ASheng”, “age”: 66, “major”: “Computer Science”}
# 使用方括号访问
print(student[“name”]) # 输出:ASheng
# 使用 get() 方法访问
print(student.get(“age”)) # 输出:66
# 当键不存在时,使用方括号会引发 KeyError 异常
# print(student[“height”]) # 会引发 KeyError
# 使用 get() 方法可以指定默认值
print(student.get(“height”, “Unknown”)) # 输出:Unknown
get()方法的好处是当键不存在时,不会引发异常,而是返回指定的默认值(如果没有指定默认值,则返回None)。
3. 字典的常见操作
-
添加键值对
除了前面提到的直接赋值的方式,还可以使用update()方法一次性添加多个键值对。
student = {“name”: “ASheng”, “age”: 66}
new_info = {“major”: “Computer Science”, “gender”: “Female”}
student.update(new_info)
print(student)
update()方法接受一个字典或者包括键值对的可迭代对象作为参数,将其键值对添加到原字典中。
-
删除键值对
pop()方法:用于删除指定键的键值对,并返回该键对应的值。如果键不存在,可以指定默认值,避免引发KeyError异常。
student = {“name”: “ASheng”, “age”: 66, “major”: “Computer Science”}
removed_age = student.pop(“age”)
print(removed_age) # 输出:66
print(student) # 输出:{‘name’: ‘ASheng’, ‘major’: ‘Computer Science’}
# 指定默认值
removed_height = student.pop(“height”, “Unknown”)
print(removed_height) # 输出:Unknown
popitem()方法:随机删除并返回字典中的一个键值对(在Python 3.7及以后版本中,会删除并返回最后插入的键值对)。
student = {“name”: “ASheng”, “age”: 66, “major”: “Computer Science”}
popped_item = student.popitem()
print(popped_item) # 例如输出:(‘major’, ‘Computer Science’)
print(student) # 输出:{‘name’: ‘ASheng’, ‘age’: 66}
del语句:可以直接删除指定键值对。
student = {“name”: “ASheng”, “age”: 66, “major”: “Computer Science”}
del student[“major”]
print(student) # 输出:{‘name’: ‘ASheng’, ‘age’: 66}
-
遍历字典
a. 遍历键
student = {“name”: “ASheng”, “age”: 66, “major”: “Computer Science”}
for key in student: # 等同于 for key in student.keys():
print(key)
这里for循环直接遍历字典时,默认遍历的是字典的键。
b. 遍历值
student = {“name”: “Alice”, “age”: 20, “major”: “Computer Science”}
for value in student.values():
print(value)
使用values()方法可以获取字典中所有的值,并进行遍历。
c. 同时遍历键和值
student = {“name”: “Alice”, “age”: 20, “major”: “Computer Science”}
for key, value in student.items():
print(f“{key}: {value}”)
items()方法返回一个包含键值对元组的可迭代对象,通过for循环可以同时获取键和值。
面向对象编程基础
1. 理解类和对象的概念,定义简单的类并创建对象
类是一种抽象的概念,它定义了一组对象的共同属性和行为。对象是类的具体实例。
# 定义一个简单的类
class Circle:
def calculate_area(self, radius):
import math
return math.pi * radius ** 2
# 创建 Circle 类的对象
circle1 = Circle()
area = circle1.calculate_area(5)
print(area) # 输出圆的面积
在这个例子中,Circle是一个类,它定义了一个方法calculate_area()用于计算圆的面积。circle1是Circle类的一个对象,通过这个对象可以调用类中定义的方法。
2. 掌握类的构造函数(__init__())的使用
构造函数__init__()是一个特殊的方法,在创建对象时会自动调用,用于初始化对象的属性。
class Rectangle:
def __init__(self, length, width):
self.length = length
self.width = width
def calculate_area(self):
return self.length * self.width
# 创建 Rectangle 类的对象
rectangle1 = Rectangle(4, 5)
area = rectangle1.calculate_area()
print(area) # 输出:20
在Rectangle类中,__init__()方法接受length和width作为参数,并将它们赋值给对象的属性self.length和self.width。这样,在创建Rectangle对象时,就必须提供length和width的值,对象的属性会在创建时被初始化。
3. 类的属性和方法
类的属性可以分为实例属性和类属性。实例属性是每个对象独有的,而类属性是所有对象共享的。方法是定义在类中的函数,用于描述对象的行为。
class Dog:
# 类属性
species = “Canis familiaris”
def __init__(self, name, age):
# 实例属性
self.name = name
self.age = age
def bark(self): # 实例方法
print(f“{self.name} says Woof!”)
# 创建 Dog 类的对象
dog1 = Dog(“Buddy”, 3)
dog2 = Dog(“Max”, 5)
# 访问类属性
print(dog1.species) # 输出:Canis familiaris
print(dog2.species) # 输出:Canis familiaris
# 访问实例属性
print(dog1.name) # 输出:Buddy
print(dog2.age) # 输出:5
# 调用实例方法
dog1.bark() # 输出:Buddy says Woof!
dog2.bark() # 输出:Max says Woof!
在这个例子中,species是类属性,所有Dog类的对象都共享这个属性。name和age是实例属性,每个对象都有自己独立的name和age值。bark()是实例方法,通过对象可以调用该方法。理解这种面向对象的编程思想是构建模块化、可复用代码的关键。
课后练习
- 创建一个字典,存储学生的姓名和对应的成绩,然后编写代码计算所有学生的平均成绩。
- 定义一个
Animal类,包含属性name和方法make_sound()(打印动物发出的声音)。然后定义一个Dog类,继承自Animal类,并重写make_sound()方法,使其打印狗的叫声(如“Woof!”)。创建一个Dog类的对象,并调用make_sound()方法。
总结
本节内容涵盖了Python中字典的核心操作与面向对象编程的基础概念。字典以其键值对结构提供了高效灵活的数据组织方式,而面向对象编程则通过类与对象的概念,为设计复杂程序提供了结构化的蓝图。熟练掌握字典的增删改查和遍历,以及理解类、对象、构造函数和属性的关系,是Python编程进阶的坚实基础。后续可以进一步探索字典推导式、嵌套字典等高级用法,以及类的继承、多态等更深入的面向对象特性。
|