字典

字典是Python中的一种映射类型Mapping Type,是一种无序的、可变的、可迭代的数据类型。它由一系列键-值对组成,其中每个键都是唯一的。与列表List和元组Tuple等序列类型不同,字典是通过键来访问值的,而不是通过索引。字典的基本特性包括:

  • 无序性: 字典中的键-值对是无序的,即插入顺序和遍历顺序不一定相同。
  • 可变性: 字典是可变的,可以通过增加、删除和修改键值对来改变字典的内容。
  • 动态性: 字典的大小是可变的,可以根据需要动态增加或减少键值对。

基本操作

创建字典

Python中可以使用大括号 {}来创建一个字典,在{}内输入key:value,每个键值对之间用逗号,隔开:

>>> my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York'}

由于字典中键是唯一的,所以在用{}直接创建字典时,如果key重复了,那么它对应的value会被最后一次输入的覆盖:

>>> new_dict = {'name': 'Alice', 'age': 30, 'city': 'New York', 'name': 'Chris', 'name': 'Eris'}
>>> print(new_dict)
{'name': 'Eris', 'age': 30, 'city': 'New York'}

访问字典中的值

可以使用键key来访问字典中的值value

>>> print(my_dict['name'])  
'Alice'
>>> print(my_dict['age'])   
30

成员运算

可以使用 innot in 运算符执行成员运算,检查键是否存在于字典中:

# 检查键是否存在
if 'name' in my_dict:
    print('Name exists in the dictionary')

更新字典中的值

可以直接对指定的键赋新值来更新字典中的值:

>>> my_dict['name'] = 'Bob'
>>> my_dict['age'] += 1
>>> print(my_dict)
{'name': 'Bob', 'age': 31, 'city': 'New York'}

添加新的键值对

可以通过直接赋值来添加新的键值对:

>>> my_dict['gender'] = 'Male'
>>> print(my_dict)
{'name': 'Bob', 'age': 31, 'city': 'New York', 'gender': 'Male'}

删除指定的键值对

可以使用 del 关键字删除指定的键值对:

>>> del my_dict['age']
>>> print(my_dict)
{'name': 'Bob', 'city': 'New York', 'gender': 'Male'}

函数

名字说明
len有返回值,返回字典的长度,即键值对的个数
min有返回值,返回字典中最小的字符
max有返回值,返回字典中最大的字符

方法

获取字典中的键、值和键值对

名字说明
get根据键获取其对应的值
keys返回字典中所有键
values返回字典中所有值
items返回字典中所有键键对(key, value)

get(key[, default])

get方法可以通过传入的参数key来获取在字典中它所对应的值,如果key不存在则返回default的值,若未给出default则默认为None

>>> my_dict.get('name')
'Bob'
>>> my_dict.get('height', 170)
170
>>> my_dict.get('weight')
>>>

keys()/values()/items()

keysvaluesitems三个方法没有参数,调用之后分别返回字典中所有的键、值和键值对:

>>> my_dict = {'name': 'Bob', 'city': 'New York', 'gender': 'Male'}
>>> keys = my_dict.keys()
>>> print(keys)
dict_keys(['name', 'city', 'gender'])
>>>
>>>
>>> values = my_dict.values()
>>> print(values)
dict_values(['Bob', 'New York', 'Male'])
>>>
>>>
>>> items = my_dict.items()
>>> print(items)
dict_items([('name', 'Bob'), ('city', 'New York'), ('gender', 'Male')])

通过观察上述三个方法的结束可以发现,它们都是可以迭代的对象,所以可以使用 for 循环遍历字典中的所有键、值和键值对:

# 遍历所有键
for key in my_dict:
    print(key)

# 遍历所有值
for value in my_dict.values():
    print(value)

# 遍历所有键值对
for key, value in my_dict.items():
    print(key, value)

更新与删除

名字说明
update使用其它字典更新当前字典
pop根据键删除字典中的键值对
popitem根据值删除字典中的键值对

update(other)

调用update之后,Python用使用other中的健值对更新当前字典。如果在other中有当前字典中不存在的key,则直接将这个健值对添加到当前字典中,否则用other中的值更新当前字典中键所对应的值。

>>> new_dict = {'name': 'Jacky', 'height': 170, 'weight': 55}
>>> my_dict.update(new_dict)
>>> print(my_dict)
{'name': 'Jacky', 'city': 'New York', 'gender': 'Male', 'height': 170, 'weight': 55}

pop(key[, default])

调用pop后,如果key存在于字典中则将其移除并返回其值,否则返回default。 如果default未给出且key不存在于字典中,则会报错:

>>> my_dict.pop('height')
170
>>> my_dict.pop('grade', 6)
6
>>> my_dict.pop('Address')
Traceback (most recent call last):
  File "<pyshell#57>", line 1, in <module>
    my_dict.pop('Address')
KeyError: 'Address'
>>>
>>>
>>> print(my_dict)
{'name': 'Jacky', 'city': 'New York', 'gender': 'Male', 'weight': 55}

popitem()

popitem会以后进先出的方式将字典中的键值对弹出并返回:

>>> my_dict.popitem()
('weight', 55)
>>> print(my_dict)
{'name': 'Jacky', 'city': 'New York', 'gender': 'Male'}

复制与清空

名字说明
copy复制并返回字典浅复制的副本
clear清空字典中所有的键值对

copy()

可以使用 copy 方法或者使用字典的构造函数来复制字典:

>>> new_dict = my_dict.copy()
>>> print(new_dict)
{'name': 'Bob', 'city': 'New York', 'gender': 'Male'}

clear()

clear()方法可以清空字典中的所有键值对,将它变成一个空字典:

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