字典(dictionary)是一种内置的数据结构,用于存储键值对(key-value pairs)。每个键(key)在字典中是唯一的,并且与一个值(value)相关联。字典提供了一种快速访问数据的方法,因为通过键可以直接查找对应的值。
创建字典
你可以使用花括号{}或dict()函数来创建一个字典。
# 使用花括号创建字典
>>> my_dict = {'name': 'Morris', 'age': 18, 'city': 'Hongkong'}
>>> my_dict
{'name': 'Morris', 'age': 18, 'city': 'Hongkong'}
# 使用dict()函数创建字段
>>> another_dict = dict(name='Morris', age=18, city='Hongkong')
>>> another_dict
{'name': 'Morris', 'age': 18, 'city': 'Hongkong'}
访问字典中的值
你可以通过键来访问字典中的值。
>>> my_dict["name"]
'Morris'
>>> another_dict["age"]
18
修改字典中的值
你可以通过键来修改字典中的值。
>>> my_dict["age"] = 16
>>> my_dict["age"]
16
添加新的键值对
你可以通过为不存在的键赋值来添加新的键值对。
>>> my_dict["email"] = "morris@163.com"
>>> my_dict["email"]
'morris@163.com'
删除键值对
你可以使用del语句或pop()方法来删除字典中的键值对。
使用del语句:
>>> del my_dict["email"]
>>> my_dict["email"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'email'
使用pop()方法:
>>> my_dict.pop("city")
'Hongkong'
>>> my_dict.pop("city2")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'city2'
# 如果键不存在,可以提供一个默认值,
>>> my_dict.pop("city2", "Not Found")
'Not Found'
检查键是否存在
你可以使用in关键字来检查字典中是否存在某个键。
>>> "name" in my_dict
True
获取字典的键、值或键值对
你可以使用keys()方法来获取字典的所有键。
>>> my_dict.keys()
dict_keys(['name', 'age'])
你可以使用values()方法来获取字典的所有值。
>>> my_dict.values()
dict_values(['Morris', 16])
你可以使用items()方法来获取字典的所有键值对。
>>> my_dict.items()
dict_items([('name', 'Morris'), ('age', 16)])
字典推导式
类似于列表推导式,字典推导式允许你快速创建字典。
# 创建一个包含平方值的字典
>>> {x: x**2 for x in range(1, 6)}
{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
字典排序
从Python3.7开始,字典默认按照插入顺序排序。
你可以使用sorted()函数对字典的键进行排序。
>>> sorted(my_dict.keys())
['age', 'name']
你可以使用sorted()函数对字典的值进行排序。
# 所有的值需要是同一个类型,否则无法比较
>>> sorted(my_dict.values())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'int' and 'str'
你可以使用sorted()函数对字典的键值对进行排序。
>>> sorted(my_dict.items())
[('age', 16), ('name', 'Morris')]
字典键的特性
字典值可以是任何的python对象,既可以是标准的对象,也可以是用户定义的,但键不行。
两个重要的点需要记住:
- 不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住,如下实例:
>>> {'Name': 'Bob', 'Age': 18, 'Name': 'Morris'}
{'Name': 'Morris', 'Age': 18}
- 键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行,如下实例:
# 元组可以作为键
>>> {('Name',): 'Runoob', 'Age': 7}
{('Name',): 'Runoob', 'Age': 7}
# 列表不能作为键
>>> {['Name']: 'Runoob', 'Age': 7}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
字典的常用函数
len(dict):计算字典元素个数,即键的总数。
>>> len(my_dict)
2
str(dict):输出字典,可以打印的字符串表示。
>>> str(my_dict)
"{'name': 'Morris', 'age': 16}"
type(variable):返回输入的变量类型,如果变量是字典就返回字典类型。
>>> type(my_dict)
<class 'dict'>
字典的常用方法
dict.copy():返回一个字典的浅复制
>>> my_dict.copy()
{'name': 'Morris', 'age': 16}
dict.fromkeys(seq[, value])
:创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
>>> my_dict.fromkeys(["name", "age", "sex"])
{'name': None, 'age': None, 'sex': None}
>>> my_dict.fromkeys(["name", "age", "sex"], 10)
{'name': 10, 'age': 10, 'sex': 10}
dict.get(key, default=None):返回指定键的值,如果键不在字典中返回default设置的默认值
>>> my_dict.get("name")
'Morris'
>>> my_dict.get("name1")
>>> my_dict.get("name1", "Morris")
'Morris'
dict.setdefault(key, default=None):和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
>>> my_dict
{'name': 'Morris', 'age': 16}
# 键不存在,设置成功
>>> my_dict.setdefault("name1", "Morris")
'Morris'
>>> my_dict
{'name': 'Morris', 'age': 16, 'name1': 'Morris'}
# 键已存在,设置失败
>>> my_dict.setdefault("name1", "Morris1")
'Morris'
>>> my_dict
{'name': 'Morris', 'age': 16, 'name1': 'Morris'}
dict.update(dict2):把字典dict2的键值对更新到dict里
>>> my_dict.update({"city": "Hongkong", "job": "Master"})
>>> my_dict
{'name': 'Morris', 'age': 16, 'name1': 'Morris', 'city': 'Hongkong', 'job': 'Master'}
dict.popitem():返回并删除字典中的最后一对键和值。
>>> my_dict.popitem()
('job', 'Master')
dict.clear():删除字典内所有元素
>>> my_dict.clear()
>>> my_dict
{}