详解Python字典的运算

  • Post category:Python

详解Python字典的运算

在Python中,字典(Dictionary)是一种非常常用的数据类型,它能够将一组键值对(Key-Value Pairs)进行存储,并通过键来访问相应的值。除了基本的访问操作,Python还提供了一系列丰富的字典运算,让我们能够更加灵活地操作字典数据。

创建字典

在Python中,可以使用花括号 {} 或者 dict() 构造函数来创建一个空的字典:

>>> my_dict1 = {}
>>> my_dict2 = dict()
>>> type(my_dict1), type(my_dict2)
(dict, dict)

可以在花括号内指定一些键值对来创建一个有内容的字典:

>>> my_dict = {'name': 'Alice', 'age': 18, 'gender': 'female'}
>>> my_dict
{'name': 'Alice', 'age': 18, 'gender': 'female'}

访问字典元素

可以使用方括号和键来访问字典中的元素:

>>> my_dict['name']
'Alice'
>>> my_dict['age']
18

如果访问不存在的键,会引发 KeyError 异常:

>>> my_dict['address']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'address'

为了避免这种异常,可以使用 get() 方法来访问字典中的元素:

>>> my_dict.get('name')
'Alice'
>>> my_dict.get('address', 'unknown')
'unknown'

当指定的键不存在时,默认返回 None,但是也可以通过 get() 方法的第二个参数来指定默认值。

更新字典

可以使用赋值语句来更新字典中的元素:

>>> my_dict['age'] = 19
>>> my_dict
{'name': 'Alice', 'age': 19, 'gender': 'female'}

也可以使用 update() 方法将一个字典合并到另一个字典中:

>>> my_dict.update({'address': 'Beijing', 'age': 20})
>>> my_dict
{'name': 'Alice', 'age': 20, 'gender': 'female', 'address': 'Beijing'}

删除字典元素

可以使用 del 关键字或者 pop() 方法删除字典中的元素:

>>> del my_dict['gender']
>>> my_dict
{'name': 'Alice', 'age': 20, 'address': 'Beijing'}
>>> my_dict.pop('age')
20
>>> my_dict
{'name': 'Alice', 'address': 'Beijing'}

在使用 pop() 方法删除元素时,如果指定的键不存在,则会引发 KeyError 异常。可以通过指定 pop() 方法的第二个参数来避免这种异常:

>>> my_dict.pop('age', None)
>>> my_dict
{'name': 'Alice', 'address': 'Beijing'}

遍历字典

可以使用循环语句来遍历字典中的键、值或键值对:

# 遍历键
>>> for key in my_dict:
...     print(key)
...
name
address

# 遍历值
>>> for value in my_dict.values():
...     print(value)
...
Alice
Beijing

# 遍历键值对
>>> for key, value in my_dict.items():
...     print(key, value)
...
name Alice
address Beijing

字典运算

除了基本的访问、更新、删除和遍历操作,Python字典还提供了许多有用的运算。

in 运算

可以使用 in 运算符来判断一个键是否存在于字典中:

>>> 'name' in my_dict
True
>>> 'age' in my_dict
False

len() 函数

可以使用 len() 函数来获取字典中键值对的数量:

>>> len(my_dict)
2

copy() 方法

可以使用 copy() 方法来复制一个字典:

>>> new_dict = my_dict.copy()
>>> new_dict
{'name': 'Alice', 'address': 'Beijing'}

clear() 方法

可以使用 clear() 方法来清空一个字典:

>>> my_dict.clear()
>>> my_dict
{}

update() 方法

之前已经介绍过 update() 方法可以将一个字典合并到另一个字典中,还可以使用它来批量添加元素:

>>> my_dict.update(name='Bob', age=30)
>>> my_dict
{'name': 'Bob', 'age': 30}

setdefault() 方法

可以使用 setdefault() 方法来获取指定键的值,如果该键不存在,则会添加该键值对到字典中:

>>> my_dict.setdefault('name', 'unknown')
'Bob'
>>> my_dict.setdefault('gender', 'unknown')
'unknown'
>>> my_dict
{'name': 'Bob', 'age': 30, 'gender': 'unknown'}

同时,如果该键已经存在,则不会更新该键的值。

popitem() 方法

可以使用 popitem() 方法随机弹出一个键值对,适合用于随机取出字典中的元素:

>>> my_dict.popitem()
('gender', 'unknown')
>>> my_dict
{'name': 'Bob', 'age': 30}

示例说明

示例1:将两个字典合并

dict1 = {'name': 'Alice', 'age': 18, 'gender': 'female'}
dict2 = {'address': 'Beijing', 'age': 20}

# 通过update()方法合并两个字典
dict1.update(dict2)

print(dict1)
# {'name': 'Alice', 'age': 20, 'gender': 'female', 'address': 'Beijing'}

在这个示例中,我们使用 update() 方法将两个字典合并为一个,并且由于两个字典中都有一个 age 键,后一个字典中的值会覆盖前一个字典中的值。

示例2:统计字符串中字符出现的次数

word = 'hello world'
char_count = {}

# 遍历字符串,统计字符数量
for char in word:
    char_count.setdefault(char, 0)  # 判断字符是否已经在字典中了
    char_count[char] += 1           # 如果存在,数量加一,否则默认为一

print(char_count)
# {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}

在这个示例中,我们遍历字符串 word 中的每一个字符,然后使用 setdefault() 方法来判断字符是否已经在字典 char_count 中了,如果不存在,则添加该键值对并将数量设置为一,否则将数量加一。最终得到了一个记录了每个字符出现次数的字典。