Python Dictionaries详解!

嗨,你好啊,我是猿java

Python Dictionaries字典是一种用于以键值对的形式存储值的数据结构。这篇文章,我们来详细分析。

什么是Python字典?

Python中的字典是一种用于以键值对的形式存储值的数据结构,这使得它与列表、元组和数组不同,因为在字典中每个键都有一个关联的值。

注意:从 Python 3.7 版本开始,字典是有序的,并且不能包含重复的键。

Python字典的语法:

1
dict_var = {key1: value1, key2: value2, ……}

如何创建字典?

通过{}创建

在 Python 中,字典可以通过在花括号{}内放置一系列元素并用逗号分隔来创建。字典包含键值对,键和值可以是任何数据类型,值可以重复,而键不能重复且必须是不可变的。

注意:字典键是区分大小写的,相同名称但不同大小写的键将被视为不同的键。

如下示例代码:第一个字典使用整数键,第二个字典使用字符串和整数键的混合,展示了 Python 字典处理各种数据类型作为键的灵活性。

1
2
3
4
5
6
7
Dict = {1: 'Hello', 2: 'Python', 3: 'Dictionaries'}
print("\n使用整数键的字典: ")
print(Dict)

Dict = {'Name': 'Hello', 1: [1, 2, 3, 4]}
print("\n使用混合键的字典: ")
print(Dict)

输出:

1
2
3
4
5
使用整数键的字典: 
{1: 'Hello', 2: 'Python', 3: 'Dictionaries'}

使用混合键的字典:
{'Name': 'Hello', 1: [1, 2, 3, 4]}

通过dict()创建

字典也可以通过内置函数dict()创建。注意:一个空字典可以通过只放置花括号{}来创建。

如下示例:展示了如何使用dict()构造函数通过在花括号内指定键值对以及作为元组列表创建字典。

1
2
3
4
5
6
7
8
9
10
11
dict1 = {}
print("\n空字典: ")
print(dict1)

dict1 = dict({1: 'Hello', 2: 'Python'})
print("\n使用dict()创建的字典: ")
print(dict1)

dict1 = dict([(1, 'Hello'), (2, 'Python')])
print("\n每个项目作为一对的字典: ")
print(dict1)

输出:

1
2
3
4
5
6
7
8
空字典:
{}

使用dict()创建的字典:
{1: 'Hello', 2: 'Python'}

每个项目作为一对的字典:
{1: 'Hello', 2: 'Python'}

创建嵌套字典

如下示例代码,定义了一个名为dict2的嵌套字典,包含多个层次的键值对。它包括一个顶级字典,键为1、2和3。键3关联的值是另一个字典,键为‘A’、‘B’和‘C’。这展示了如何使用 Python 字典创建层次结构的数据结构。

1
2
dict2 = {1: 'Hello', 2: 'For', 3: {'A': 'Welcome', 'B': 'To', 'C': 'Python'}}
print(Dict)

输出:

1
{1: 'Hello', 2: 'For', 3: {'A': 'Welcome', 'B': 'To', 'C': 'Python'}}

创建字典的复杂性

时间复杂度:O(len(dict))
空间复杂度:O(n)

向字典中添加元素

创建时添加元素

可以通过多种方式向字典中添加元素。可以一次添加一个值,通过定义键和值,例如dict1[Key] = ‘Value’

使用内置的update()方法

使用内置的update()方法可以更新字典中现有的值。嵌套键值也可以添加到现有字典中。

注意:在添加值时,如果键值对已经存在,则值会被更新,否则将添加一个新的键值对。

如下示例代码:向 Python字典中添加不同数据类型的项目,该代码从一个空字典开始,然后向其中添加键值对,它展示了如何添加各种数据类型的元素,更新键的值,甚至将字典嵌套到主字典中。该代码展示了如何在Python中操作字典。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
dict1 = {}
print("空字典: ")
print(dict1)
dict1[0] = 'Hello'
dict1[2] = 'Python'
dict1[3] = 1
print("\n添加3个元素后的字典: ")
print(dict1)

dict1['Value_set'] = 2, 3, 4
print("\n添加3个元素后的字典: ")
print(dict1)

dict1[2] = 'Welcome'
print("\n更新键值: ")
print(dict1)
dict1[5] = {'Nested': {'1': 'Life', '2': 'Dictionaries'}}
print("\n添加嵌套键: ")
print(dict1)

输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
空字典: 
{}

添加3个元素后的字典:
{0: 'Hello', 2: 'Python', 3: 1}

添加3个元素后的字典:
{0: 'Dictionaries', 2: 'For', 3: 1, 'Value_set': (2, 3, 4)}

更新键值:
{0: 'Dictionaries', 2: 'Welcome', 3: 1, 'Value_set': (2, 3, 4)}

添加嵌套键:
{0: 'Dictionaries', 2: 'Welcome', 3: 1, 'Value_set': (2, 3, 4), 5: {'Nested': {'1': 'Life', '2': 'Dictionaries'}}}

添加元素到字典的复杂性

时间复杂度:O(1)/O(n)
空间复杂度:O(1)

访问字典的元素

使用键访问

该代码展示了如何使用键访问字典中的元素。它访问并打印与键‘name’和1关联的值,展示了键可以是不同的数据类型(字符串和整数)。

1
2
3
4
5
dict1 = {1: 'Hello', 'name': 'For', 3: 'Python'}
print("使用键访问元素:")
print(dict1['name'])
print("使用键访问元素:")
print(dict1[1])

输出:

1
2
3
4
使用键访问元素:
For
使用键访问元素:
Python

使用get访问

使用get()方法也可以帮助访问字典中的元素,该方法接受键作为参数并返回值。

如下示例代码,展示了如何使用get()方法访问字典元素。它检索并打印字典dict1中与键3 关联的值。该方法提供了一种安全的方法来访问字典值,避免在键不存在时抛出 KeyError。

1
2
3
4
dict1 = {1: 'Hello', 'name': 'For', 3: 'Hello'}

print("使用get()访问元素:")
print(dict1.get(3))

输出:

1
2
使用get()访问元素:
Hello

访问字典元素的复杂性

时间复杂度:O(1)
空间复杂度:O(1)

使用索引[]访问嵌套字典的元素

要访问嵌套字典中任何键的值,请使用索引[]语法。

如下示例代码展示了如何处理嵌套字典。首先访问并打印与键‘dict1’关联的整个嵌套字典。然后,通过嵌套字典导航访问并打印特定值。最后,检索并打印嵌套字典‘dict2’中与键‘Name’关联的值。

1
2
3
4
5
dict0 = {'dict1': {1: 'Hello'},'dict2': {'Name': 'Python'}}

print(dict0['dict1'])
print(dict0['dict1'][1])
print(dict0['dict2']['Name'])

输出:

1
2
3
{1: 'Hello'}
Python
Python

删除字典中的项目

使用‘del’关键字删除元素

可以使用del关键字删除字典中的项目,如下所示。

示例:该代码定义了一个字典,打印其原始内容,然后使用del语句删除与键1关联的元素。删除后,它打印更新后的字典,显示指定的元素已被移除。

1
2
3
4
5
6
7
dict1 = {1: 'Hello', 'name': 'For', 3: 'Python'}

print("字典:")
print(dict1)
del(dict1[1])
print("删除后的字典:")
print(dict1)

输出:

1
2
3
4
字典:
{1: 'Hello', 'name': 'For', 3: 'Python'}
删除后的字典:
{'name': 'For', 3: 'Python'}

字典方法

以下是一些内置字典函数及其描述,你可以使用这些函数对字典进行操作。

方法 描述
dict() 用于创建一个新字典或将其他可迭代对象转换为字典。
dict.clear() 移除字典中的所有元素
dict.copy() 返回字典的副本
dict.get(key, default = “None”) 返回指定键的值
dict.items() 返回一个包含字典中每个键值对的元组列表
dict.keys() 返回一个包含字典所有键的列表
dict.update(dict2) 使用指定的键值对更新字典
dict.values() 返回字典所有值的列表
pop() 移除指定键的元素
popItem() 移除最后插入的键值对
dict.setdefault(key,default= “None”) 如果字典中没有指定的键,则将该键设置为默认值
dict.has_key(key) 如果字典包含指定的键,则返回True

Python中的多重字典操作

该代码以字典dict1开始,并创建其副本dict2。然后展示了几个字典操作:清空dict1,访问值,检索键值对和键,移除特定键值对,更新值以及检索值。这些操作展示了如何在Python中处理字典。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dict1 = {1: "Python", 2: "Java", 3: "Ruby", 4: "Scala"}
dict2 = dict1.copy()
print(dict2)
dict1.clear()
print(dict1)
print(dict2.get(1))
print(dict2.items())
print(dict2.keys())
dict2.pop(4)
print(dict2)
dict2.popitem()
print(dict2)
dict2.update({3: "Scala"})
print(dict2)
print(dict2.values())

输出:

1
2
3
4
5
6
7
8
9
{1: 'Python', 2: 'Java', 3: 'Ruby', 4: 'Scala'}
{}
Python
dict_items([(1, 'Python'), (2, 'Java'), (3, 'Ruby'), (4, 'Scala')])
dict_keys([1, 2, 3, 4])
{1: 'Python', 2: 'Java', 3: 'Ruby'}
{1: 'Python', 2: 'Java'}
{1: 'Python', 2: 'Java', 3: 'Scala'}
dict_values(['Python', 'Java', 'Scala'])

常见问题解答

如何在Python中使用字典?

Python中的字典用于存储键值对。它们是无序的、可变的,并且可以包含任何Python对象作为值。

1
2
3
4
5
6
7
8
9
10
11
# 创建一个字典
my_dict = {‘key1’: ‘value1’, ‘key2’: ‘value2’}
# 使用键访问值
print(my_dict[‘key1’]) # 输出: value1

# 修改值
my_dict[‘key2’] = ‘new_value’
# 添加新的键值对
my_dict[‘key3’] = ‘value3’
# 移除一个键值对
del my_dict[‘key1’]

如何在Python中打印字典?

你可以使用print()来显示字典的内容。你可以打印整个字典或通过访问键或值打印特定元素。

1
2
3
4
5
my_dict = {‘name’: ‘Alice’, ‘age’: 30}
# 打印整个字典
print(my_dict)
# 打印特定元素
print(my_dict[‘name’]) # 输出: Alice

如何在Python中声明一个字典?

你可以通过在花括号{}内包含键值对来声明一个字典。

1
2
3
4
# 空字典
empty_dict = {}
# 具有初始值的字典
my_dict = {‘key1’: ‘value1’, ‘key2’: ‘value2’}

什么是Python中的字典键和值?

在字典中,键是用于访问值的唯一标识符。值是与这些键关联的数据。

1
2
3
4
my_dict = {‘name’: ‘Alice’, ‘age’: 30}
# 访问键和值
print(my_dict.keys()) # 输出: dict_keys([‘name’, ‘age’])
print(my_dict.values()) # 输出: dict_values([‘Alice’, 30])

在字典中如何使用all()、any()、cmp()和sorted()?

  • all()检查字典中的所有值是否都为True。
  • any()检查字典中的任何一个值是否为True。
  • cmp()(在Python 3中不再可用)用于比较两个字典。
  • sorted()返回字典中键的新排序列表。
1
2
3
4
my_dict = {‘A’: 10, ‘B’: 20, ‘C’: 0}
print(all(my_dict.values())) # False (0的值为False)
print(any(my_dict.values())) # True (至少有一个值为True)
print(sorted(my_dict)) # [‘A’, ‘B’, ‘C’] (排序后的键)

总结

本文我们对 Python Dictionaries进行了详细的分析,Python字典是一种用于以键值对形式存储数据的强大数据结构。字典在Python 3.7及更高版本中是有序的,键必须是不可变且唯一的。字典可以通过花括号{}或dict()函数创建,并支持多种数据类型作为键和值。字典还支持嵌套结构,允许创建复杂的层次数据。

学习交流

如果你觉得文章有帮助,请帮忙转发给更多的好友,或关注公众号:猿java,持续输出硬核文章。

drawing