Python3(11) 字典
在 Python 编程中,字典(Dictionary)是一种功能强大且灵活的数据结构。它以键值对(key-value pairs)的形式存储数据,允许快速查找和修改数据,广泛应用于各种编程场景。下面结合菜鸟教程内容,通过代码示例深入学习 Python3 字典知识,方便后续复习回顾。
一、字典的创建
1.1 使用花括号创建
使用花括号{}
包裹键值对,键值对之间用逗号分隔,键与值之间用冒号分隔,即可创建字典。例如:
person = {'name': 'Alice', 'age': 30, 'city': 'New York'}
print(person)
上述代码创建了一个包含姓名、年龄和城市信息的字典,并打印输出。字典中的键必须是唯一的,值可以是任意数据类型。
1.2 创建空字典
创建空字典有两种方式,一种是直接使用{}
,另一种是使用内置函数dict()
。示例如下:
# 使用花括号创建空字典
empty_dict1 = {}
print(empty_dict1)# 使用dict()函数创建空字典
empty_dict2 = dict()
print(empty_dict2)
两种方式都能创建空字典,在后续需要动态添加数据时非常有用。
1.3 使用 dict () 函数创建字典
dict()
函数还可以通过其他方式创建字典。例如,传入关键字参数:
student = dict(name='Bob', grade=95)
print(student)
或者传入包含键值对的元组或列表:
data = [('x', 10), ('y', 20)]
coordinates = dict(data)
print(coordinates)
这种方式在处理一些需要转换为字典的数据时很方便。
二、访问字典里的值
通过将键放在方括号[]
中,可以访问字典中对应的值。例如:
person = {'name': 'Alice', 'age': 30, 'city': 'New York'}
print(person['name'])
print(person['age'])
运行代码后,分别输出字典person
中name
和age
键对应的值。
需要注意的是,如果使用字典中不存在的键访问数据,会引发KeyError
异常。例如:
# print(person['gender'])
运行这行代码会报错,提示KeyError: 'gender'
,因为person
字典中没有gender
这个键。
为了避免这种错误,可以使用get()
方法来访问值。get()
方法在键不存在时,会返回指定的默认值(默认为None
)。例如:
print(person.get('gender'))
print(person.get('gender', 'Unknown'))
第一个get()
方法返回None
,第二个get()
方法返回指定的默认值Unknown
。
三、修改字典
3.1 更新键值对
如果要修改字典中已有的键值对,直接给键赋值新的值即可。例如:
person = {'name': 'Alice', 'age': 30, 'city': 'New York'}
person['age'] = 31
print(person)
上述代码将person
字典中age
键的值从 30 更新为 31。
3.2 添加新键值对
添加新键值对的方式与修改类似,只需使用一个不存在的键进行赋值操作。例如:
person['job'] = 'Engineer'
print(person)
运行代码后,person
字典中新增了job
键及其对应的值Engineer
。
3.3 使用 update () 方法更新字典
update()
方法可以将另一个字典的键值对更新到当前字典中。如果有相同的键,会覆盖当前字典中的值;如果是新的键,则会添加到当前字典。例如:
person = {'name': 'Alice', 'age': 30}
new_info = {'age': 31, 'city': 'San Francisco'}
person.update(new_info)
print(person)
person
字典中的age
键值被更新,同时新增了city
键值对。
四、删除字典元素
4.1 删除单个键值对
使用del
语句可以删除字典中的单个键值对。例如:
person = {'name': 'Alice', 'age': 30, 'city': 'New York'}
del person['city']
print(person)
运行代码后,person
字典中city
键值对被删除。
4.2 清空字典
使用字典的clear()
方法可以清空字典中的所有键值对,使字典变为空字典。例如:
person = {'name': 'Alice', 'age': 30, 'city': 'New York'}
person.clear()
print(person)
此时person
字典已被清空,输出结果为{}
。
4.3 删除字典
使用del
语句还可以删除整个字典对象。例如:
person = {'name': 'Alice', 'age': 30, 'city': 'New York'}
del person
# print(person)
运行del person
后,person
字典被删除,再尝试打印会引发NameError
异常,提示person
未定义。
五、字典键的特性
5.1 键的唯一性
字典中不允许同一个键出现两次。创建字典时,如果同一个键被赋值两次,后一个值会覆盖前一个值。例如:
info = {'name': 'Bob', 'name': 'Tom'}
print(info['name'])
运行代码后,info
字典中name
键对应的值为Tom
,前面赋值的Bob
被覆盖。
5.2 键的不可变性
键必须是不可变的数据类型,如字符串、数字或元组。列表等可变类型不能作为字典的键,否则会引发TypeError
异常。例如:
# bad_dict = {[1, 2]: 'value'}
运行这行代码会报错,提示TypeError: unhashable type: 'list'
,因为列表是不可哈希的,不能作为字典的键。
六、字典内置函数与方法
6.1 内置函数
len(dict)
:计算字典中键值对的数量,即键的总数。例如:
person = {'name': 'Alice', 'age': 30, 'city': 'New York'}
print(len(person))
输出结果为 3,表示person
字典中有 3 个键值对。
2. str(dict)
:将字典转换为可打印的字符串表示形式。例如:
person = {'name': 'Alice', 'age': 30, 'city': 'New York'}
print(str(person))
输出结果为{'name': 'Alice', 'age': 30, 'city': 'New York'}
,方便查看字典内容。
3. type(variable)
:返回变量的类型。如果变量是字典,返回<class 'dict'>
。例如:
person = {'name': 'Alice', 'age': 30, 'city': 'New York'}
print(type(person))
输出结果表明person
变量的类型是字典。
6.2 内置方法
1.dict.clear()
:删除字典内所有元素,前面已有示例。
2.dict.copy()
:返回一个字典的浅复制。浅复制意味着新字典和原字典中的嵌套对象(如列表、字典等)是共享的。例如:
original = {'a': [1, 2]}
copied = original.copy()
original['a'].append(3)
print(original)
print(copied)
运行代码后,原字典和复制的字典中,键a
对应的值(列表)都发生了变化,因为它们共享这个列表对象。
3. dict.fromkeys()
:创建一个新字典,以序列中的元素作为字典的键,所有键对应同一个初始值。例如:
运行代码后,创建了一个新字典,键为['x', 'y', 'z']
,对应的值均为 0。
4. dict.get(key, default=None)
:返回指定键的值,如果键不存在则返回默认值,前面已有示例。
5. key in dict
:判断键是否在字典中,如果在返回True
,否则返回False
。例如:
person = {'name': 'Alice', 'age': 30, 'city': 'New York'}
print('name' in person)
print('gender' in person)
运行代码后,分别判断name
和gender
是否在person
字典中,并输出相应的布尔值。
6. dict.items()
:以列表形式返回一个视图对象,包含字典中的所有键值对。例如:
person = {'name': 'Alice', 'age': 30, 'city': 'New York'}
items = person.items()
print(list(items))
运行代码后,输出结果为[('name', 'Alice'), ('age', 30), ('city', 'New York')]
,方便遍历字典的键值对。
7. dict.keys()
:返回一个视图对象,包含字典中的所有键。例如:
person = {'name': 'Alice', 'age': 30, 'city': 'New York'}
keys = person.keys()
print(list(keys))
输出结果为['name', 'age', 'city']
,可用于获取字典的所有键。
8. dict.setdefault(key, default=None)
:和get()
方法类似,但如果键不存在于字典中,将会添加键并将值设为默认值。例如:
person = {'name': 'Alice', 'age': 30}
print(person.setdefault('city', 'Unknown'))
print(person)
运行代码后,由于person
字典中原本没有city
键,setdefault()
方法添加了该键并设置值为Unknown
,同时返回这个默认值。
9. dict.update(dict2)
:把字典dict2
的键值对更新到当前字典中,前面已有示例。
10. dict.values()
:返回一个视图对象,包含字典中的所有值。例如:
person = {'name': 'Alice', 'age': 30, 'city': 'New York'}
values = person.values()
print(list(values))
输出结果为['Alice', 30, 'New York']
,用于获取字典的所有值。
11. dict.pop(key[,default])
:删除字典中指定键所对应的值,并返回被删除的值。如果键不存在且没有指定默认值,会引发KeyError
异常。例如:
person = {'name': 'Alice', 'age': 30, 'city': 'New York'}
removed_age = person.pop('age')
print(removed_age)
print(person)
运行代码后,删除person
字典中的age
键值对,并返回被删除的age
值,字典中不再包含age
键。
12. dict.popitem()
:返回并删除字典中的最后一对键和值。在 Python 3.7 及以上版本中,字典是有序的,popitem()
删除的是最后插入的键值对;在之前版本中,删除的是任意一对键值对。例如:
person = {'name': 'Alice', 'age': 30, 'city': 'New York'}
popped_item = person.popitem()
print(popped_item)
print(person)
运行代码后,返回并删除了person
字典中的最后一对键值对,字典中相应键值对被移除。
七、总结
Python3 字典作为一种强大的数据结构,在数据处理、配置管理等方面发挥着重要作用。通过学习字典的创建、访问、修改、删除操作,以及其键的特性和丰富的内置函数与方法,能够更加高效地利用字典解决实际编程问题。建议在日常编程中多使用字典,通过实践加深对其理解和掌握。