前言
Python 字典 是一种非常强大且灵活的数据结构,它允许你通过键(key)来存储和检索值(value)。想象一下,字典就像一个巨大的电话簿,其中每个电话号码都有一个对应的名字。在这个电话簿里,你可以通过名字(键)快速找到对应的电话号码(值)。
字典中的每个元素都由一对键值对组成,键必须是唯一的,而且通常是不可变的数据类型,如字符串或数字。值则可以是任意类型的数据,甚至可以是另一个字典或列表。这种灵活性使得字典成为处理各种复杂数据的理想选择。
与列表不同,字典是无序的,这意味着元素不会按照插入的顺序排列。这使得字典非常适合用来表示现实生活中的映射关系,例如:
- 电话簿:姓名作为键,电话号码作为值。
- 词汇表:单词作为键,定义作为值。
- 配置文件:配置项名称作为键,配置值作为值。
字典的一个重要特点是基于键的快速查找机制。无论字典中有多少个元素,查找时间几乎都是固定的,这使得字典在处理大量数据时非常高效。
举个例子,假设你正在开发一个游戏,需要记录玩家的分数。你可以使用字典来存储每个玩家的分数,其中玩家的名字作为键,分数作为值。这样,你就可以轻松地通过玩家的名字查询他们的分数,或者更新他们的分数。
总之,Python 字典是一种非常实用的数据结构,它不仅能够高效地存储和检索数据,还能够帮助你轻松地管理复杂的数据关系。无论是处理简单的数据还是构建复杂的程序,字典都是非常有价值的工具。
一、简单字典示例
dictionary = {'name': 'John', 'age': 30, 'city': 'New York'}
print(dictionary["name"])
类似于java的Map,原理是一致的,操作方式不同罢了。
二、使用字典
Python字典是一种高效的数据结构,用于存储无序的键值对集合。每个键(key)必须是唯一的且不可变的,而值(value)则可以是任意类型的数据,包括数字、字符串、列表、甚至其他字典。字典通过键来快速访问、添加、修改或删除值,适用于需要频繁查找和更新数据的场景。字典的创建和操作非常灵活,支持多种内置方法,如 get(), keys(), values(), items() 等,便于数据的管理和操作。字典在Python编程中广泛应用于数据存储、配置管理、缓存等多种场景,是处理复杂数据关系的强大工具。
访问字典中的值
# 创建一个字典
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
# 使用键访问值
name = my_dict['name']
age = my_dict['age']
city = my_dict['city']
print(f"Name: {name}") # 输出: Name: Alice
print(f"Age: {age}") # 输出: Age: 25
print(f"City: {city}") # 输出: City: New York
这里是访问字典中某个键关联的值的一种最简单方式,即指定字典名并且把键放在后面的方括号内。
添加键值对
字典是动态结构,可以添加键值对,格式为 字典名[‘键’] = 值
# 创建一个字典
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
# 添加一个新的键值对
my_dict['email'] = 'alice@example.com'
# 打印字典以查看更新后的内容
print(my_dict)
Python在3.7版本以后开启了插入顺序的保证,即遍历时的顺序和插入时的顺序一致。
使用空字典
当我们需要使用字典来存储用户提供的数据或者编写能自动生成大量键值对的代码,通常需要先定义一个空字典。
my_dict = {}
my_dict['name'] = 'John'
my_dict['age'] = 30
my_dict['city'] = 'New York'
print(my_dict)
修改字典中的值
my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}
print(f"原来的字典值为:{my_dict}")
my_dict['name'] = 'Jane'
my_dict['age'] = my_dict['age'] + 9
print(f"修改后的字典值为:{my_dict}")
先是创建了一个字典,接着修改了name和age对应的值,打印结果如下
删除键值对
Python字典中不需要的信息,可以使用del语句把对应的键值对彻底删除
my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}
print(my_dict)
del my_dict['age']
print(my_dict)
以上代码删除了键为age的字典值
类似的对象组成的字典
favorite_languages = {
'jen': 'python',
'sarah': 'c++',
'edward': 'ruby',
'phil': 'python',
}
language = favorite_languages['sarah'].title()
print(f"Sarah's favorite language is {language}.")
代码中设置了一个字典,关于每个人最喜欢的编程语言,值可以相同
使用get()来访问值
前面已经说了一种使用放在方括号内的键从字典中获取感兴趣的值,但可能会引发问题:指定的键不存在就会出错。
favorite_languages = {
'jen': 'python',
'sarah': 'c++',
'edward': 'ruby',
'phil': 'python',
}
language = favorite_languages['jack']
print(f"Sarah's favorite language is {language}.")
字典中根本就不存在 jack这个键,直接报错了,我们使用get()方法获取
favorite_languages = {
'jen': 'python',
'sarah': 'c++',
'edward': 'ruby',
'phil': 'python',
}
language = favorite_languages.get('jack', 'Not found')
print(f"Sarah's favorite language is {language}.")
get()方法有两个参数,第一个用于指定键,必不可少,第二个参数用于当指定的键不存在时返回的值,可选。
如果不写默认返回值:
language = favorite_languages.get('jack')
那么这个返回的结果就是 None
,表示不存在,非错误。
三、字典遍历
Python字典复杂的可以存储上百万个键值对,这就需要字典支持遍历,Python字典既可以支持遍历所有键值对,也可以单独支持遍历键或者值。
遍历所有键值对
# 定义一个包含较多数据的简单字典
data_dict = {
"name": "Alice",
"age": 30,
"city": "New York",
"email": "alice@example.com",
"phone": "+1234567890",
"job_title": "Software Engineer",
"company": "TechCorp",
"years_of_experience": 5,
"is_student": False
}
# 打印字典中的所有键值对
for key, value in data_dict.items():
print(f"{key}: {value}")
可以看到遍历字典,使用到了for循环,第一部分是两个变量,表示键和值,名称随意。第二部分是字典名调用方法items(),这部分是返回一个键值对列表。
遍历所有键
不需要值时,我们使用keys()方法遍历所有键,有时会很有效。
字典部分还是使用上述代码,for循环遍历键的使用示例如下
# 打印字典中的所有键值对
for key in data_dict.keys():
print(key)
注意keys()方法返回的是一个列表,我们可以使用列表的 in
和 not in
方法来判断键是否存在。
# 定义一个包含较多数据的简单字典
data_dict = {
"name": "Alice",
"age": 30,
"city": "New York",
"email": "alice@example.com",
}
key = "phone"
if key in data_dict:
print(f"The phone number of {data_dict['name']} is {data_dict[key]}")
else:
print(f"The key {key} is not in the dictionary")
key = "email"
if key in data_dict:
print(f"The email address of {data_dict['name']} is {data_dict[key]}")
else:
print(f"The key {key} is not in the dictionary")
按特定顺序遍历所有键
Python中提供了 sorted()
函数来获得特定顺序排列的键列表的副本
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
for name in sorted(favorite_languages.keys()):
print(f"{name.title()}, thank you for taking the poll.")
遍历字典中的所有值
Python中使用 values()
方法遍历字典的所有值
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
for language in favorite_languages.values():
print(language.title())
若获取的值当中有重复的怎么办?别着急,Python为我们提供了 set()
方法,把值列表传进去即可
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
for language in set(favorite_languages.values()):
print(language.title())
Python被去重了
集合简述
在 Python 中,集合(set)是一种内置数据类型,用于存储唯一且无序的元素集合。集合中的每个元素都是唯一的(不允许重复),并且集合本身是可变的,这意味着你可以添加或删除元素,但不能改变单个元素。
创建集合的方式:使用{}
my_set = {1, 2, 3}
注意:my_set = {} 创建的不是一个空集合,而是一个空字典。创建空集合,需要使用set(), my_set = set()
languages = {'python', 'rust', 'python', 'c'}
print(languages)
四、嵌套
有时候,需要把多个字典存储在列表中或将列表作为值存储在字典中,这称之为嵌套。可以在列表中嵌套字典,也可以在字典中嵌套列表,甚至在字典中嵌套字典。这是复杂的数据结构,其他语言也是一样。
列表中存储字典
dict_0 = {
'name': 'John',
'age': 25,
'city': 'New York',
'country': 'USA'
}
dict_1 = {
'name': 'Jane',
'age': 30,
'city': 'Los Angeles',
'country': 'USA'
}
dict_2 = {
'name': 'Bob',
'age': 40,
'city': 'Chicago',
}
people = [dict_0, dict_1, dict_2]
for person in people:
print(person)
这是一段简单的代码,定义了三个字典,然后把三个字典添加到列表中,最后for循环打印
字典中存储列表
dict = {
'name': 'John',
'age': 25,
'city': 'New York',
'country': 'USA',
'hobbies': ['reading', 'swimming', 'hiking']
}
for hobby in dict['hobbies']:
print(hobby)
dict字典中有一个键 hobbies,关联的值为爱好列表
字典中存储字典
字典中可以嵌套字典,但是代码结构会变得复杂,而且字典元素可以有不同的键值
# 创建一个嵌套字典来存储员工的信息
employee_info = {
'employee1': {
'name': 'Alice',
'age': 30,
'department': 'Engineering'
},
'employee2': {
'name': 'Bob',
'age': 25,
'department': 'Sales',
'salary': 50000
},
'employee3': {
'name': 'Charlie',
'age': 35,
'department': 'Marketing'
}
}
print(employee_info)
总结
本篇文章介绍了字典这种数据结构的用法,以及字典和列表的、字典和字典的相互嵌套。实际当中要注意嵌套层级的深度。本文依然是比较基础的内容,但代码示例中展示的用法需要多动手练习,才能熟练掌握。