字典(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对象,既可以是标准的对象,也可以是用户定义的,但键不行。

两个重要的点需要记住:

  1. 不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住,如下实例:
>>> {'Name': 'Bob', 'Age': 18, 'Name': 'Morris'}
{'Name': 'Morris', 'Age': 18}
  1. 键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行,如下实例:
# 元组可以作为键
>>> {('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
{}