python3字典dictionary – Python3教程

上一章Python教程请查看:python3集合set
在本文中,你将学习关于Python dictionary的所有内容:如何创建、访问、添加和删除元素,以及各种内置方法。
Python中的字典是什么?Python字典是一个无序的项集合,其他复合数据类型只有值作为元素,而字典有一个键:值对。
字典被优化为在键已知时快速检索值。
如何创建字典?创建字典非常简单,只需将条目放在用逗号分隔的花括号{}中即可。
【python3字典dictionary – Python3教程】一个项目有一个键和相应的值,并以对的形式表示,key: value。
虽然值可以是任何数据类型,并且可以重复,但是键必须是不可变类型(字符串、数字或带有不可变元素的元组),并且必须是惟一的。

# 空字典 my_dict = {} # 整数键 my_dict = {1: 'apple', 2: 'ball'}my_dict = {'name': 'John', 1: [2, 4, 3]} # 使用 dict() my_dict = dict({1:'apple', 2:'ball'}) # 将每个项作为一对的序列 my_dict = dict([(1,'apple'), (2,'ball')])

正如上面所看到的,我们还可以使用内置函数dict()创建一个字典。
如何从字典中访问元素?虽然索引与其他容器类型一起使用来访问值,但是dictionary使用键,键可以在方括号内使用,也可以与get()方法一起使用。
使用get()的区别在于,如果没有找到key,它将返回None,而不是KeyError。
my_dict = {'name':'Jack', 'age': 26}# 输出: Jack print(my_dict['name'])# 输出: 26 print(my_dict.get('age'))# 试图访问不存在的关键字会抛出错误 # my_dict.get('address') # my_dict['address']

如何更改或添加字典中的元素?字典是可变的,我们可以使用赋值运算符添加新项或更改现有项的值。
如果键已经存在,则值将被更新,否则新键:值对将被添加到字典中。
my_dict = {'name':'Jack', 'age': 26}# 更新 my_dict['age'] = 27#输出: {'age': 27, 'name': 'Jack'} print(my_dict)# 添加 my_dict['address'] = 'Downtown'# 输出: {'address': 'Downtown', 'age': 27, 'name': 'Jack'} print(my_dict)

如何删除字典或从字典中删除元素?我们可以使用pop()方法删除字典中的特定项,此方法使用提供的键删除项目并返回值。
popitem()方法可用于从字典中删除和返回任意项(键、值),可以使用clear()方法立即删除所有项。
我们还可以使用del关键字来删除单个项或整个字典本身。
# 创建字典 squares = {1:1, 2:4, 3:9, 4:16, 5:25}# 删除指定项 # 输出: 16 print(squares.pop(4))# 输出: {1: 1, 2: 4, 3: 9, 5: 25} print(squares)# 删除任意项 # 输出: (1, 1) print(squares.popitem())# 输出: {2: 4, 3: 9, 5: 25} print(squares)# 删除指定项 del squares[5]# 输出: {2: 4, 3: 9} print(squares)# 删除所有项 squares.clear()# 输出: {} print(squares)# 删除字典本身 del squares# 抛出 Error # print(squares)

Python字典的方法字典中可用的方法如下表所示,其中一些已经在上面的示例中使用过。
Python字典的方法
方法 描述
clear() 从字典中删除所有项。
copy() 返回字典的浅拷贝。
fromkeys(seq[,  v]) 返回一个新的字典,键来自seq,值等于v(默认为None)。
get(key[,d]) 返回键值。如果键不退出,返回d(默认为None)。
items() 返回字典项的新视图(键、值)。
keys() 返回字典键的新视图。
pop(key[,d]) 删除带键的项并返回其值,如果没有找到键,则返回d。如果没有提供d,并且没有找到密钥,则引发密钥错误。
popitem() 删除并返回任意项(键、值)。如果字典为空,则引发KeyError。
setdefault(key[,d]) 如果键在字典中,返回它的值。如果没有,则插入值为d的键并返回d(默认为None)。
update([other]) 用来自其他的键/值对更新字典,覆盖现有的键。
values() 返回字典值的新视图
下面是使用这些方法的一些示例。
marks = {}.fromkeys(['Math','English','Science'], 0)# 输出: {'English': 0, 'Math': 0, 'Science': 0} print(marks)for item in marks.items(): print(item)# 输出: ['English', 'Math', 'Science'] list(sorted(marks.keys()))

Python字典推导(Dictionary comprehension)字典推导是一种优雅和简洁的方法来创建新的字典从一个可迭代的Python。
字典推导由一个表达式对(key: value)和一个for语句组成,后者位于花括号{}内。
下面是一个制作字典的例子,每个条目都是一对数字和它的平方。
squares = {x: x*x for x in range(6)}# 输出: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25} print(squares)

这个代码相当于:
squares = {} for x in range(6): squares[x] = x*x

字典可选地包含更多的for或if语句。
一个可选的if语句可以过滤掉条目以形成新的字典。
这里有一些例子,使字典只有奇数项。
odd_squares = {x: x*x for x in range(11) if x%2 == 1}# 输出: {1: 1, 3: 9, 5: 25, 7: 49, 9: 81} print(odd_squares)

其他字典操作字典成员测试
我们可以测试一个键是否在字典中,或者是否使用关键字in,请注意,成员资格测试仅针对键,而不针对值。
squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}# 输出: True print(1 in squares)# 输出: True print(2 not in squares)# 输出: False print(49 in squares)

遍历字典
使用for循环,我们可以遍历字典中的每个键。
squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81} for i in squares: print(squares[i])

字典内置函数
内置函数如all()、any()、len()、cmp()、sort()等通常与dictionary一起用于执行不同的任务。
内置函数与字典
函数 说明
all() 如果字典的所有键都为真(或者字典为空),则返回True。
any() 如果字典中的任何键为真,则返回真。如果字典是空的,返回False。
len() 返回字典中的长度(条目的数量)。
cmp() 比较两个字典的项。
sorted() 在字典中返回一个新排序的键列表。
下面是一些使用内置函数处理dictionary的示例。
squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}# 输出: 5 print(len(squares))# 输出: [1, 3, 5, 7, 9] print(sorted(squares))

    推荐阅读