打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Python dict字典详解
和列表相同,字典也是许多数据的集合,属于可变序列类型。不同之处在于,它是无序的可变序列,其保存的内容是以“键值对”的形式存放的。

字典类型是 Python 中唯一的映射类型。“映射”是数学中的术语,简单理解,它指的是元素之间相互对应的关系,即通过一个元素,可以唯一找到另一个元素。如图 1 所示。


图 1 映射关系示意图

字典中,习惯将各元素对应的索引称为键(key),各个键对应的元素称为值(value),键及其关联的值称为“键值对”。

字典类型很像学生时代常用的新华字典。我们知道,通过新华字典中的音节表,可以快速找到想要查找的汉字。其中,字典里的音节表就相当于字典类型中的键,而键对应的汉字则相当于值。

总的来说,字典类型所具有的主要特征如表 1 所示。

表 1 Python 字典特征
主要特征解释
通过键而不是通过索引来读取元素字典类型有时也称为关联数组或者散列表(hash)。它是通过键将一系列的值联系起来的,这样就可以通过键从字典中获取指定项,但不能通过索引来获取。
字典是任意数据类型的无序集合和列表、元组不同,通常会将索引值 0 对应的元素称为第一个元素。而字典中的元素是无序的。
字典是可变的,并且可以任意嵌套字典可以在原处增长或者缩短(无需生成一个副本),并且它支持任意深度的嵌套,即字典存储的值也可以是列表或其它的字典。
字典中的键必须唯一字典中,不支持同一个键出现多次,否则,只会保留最后一个键值对。
字典中的键必须不可变字典中的值是不可变的,只能使用数字、字符串或者元组,不能使用列表。

Python 中的字典类型相当于 Java 或者 C++ 中的 Map 对象。


和列表、元组一样,字典也有它自己的类型。Python 中,字典的数据类型为 dict,通过 type() 函数即可查看:

>>> a = {'one':1,'two':2,'three':3} #a 是一个字典类型
>>> type(a)
<class 'dict'>

Python创建字典

创建字典的方式有很多,下面一一做介绍。

1) 花括号语法创建字典

由于字典中每个元素都包含 2 部分,分别是键和值,因此在创建字典时,键和值之间使用冒号分隔,相邻元素之间使用逗号分隔,所有元素放在大括号 {} 中。

Python 字典类型的语法格式如下:

dictname = {'key':'value1','key2':'value2',...,'keyn':valuen}

其中 dictname 表示字典类型名,keyn : valuen 表示各个元素的键值对。需要注意的是,同一字典中各个元素的键值必须唯一。

如下代码示范了使用花括号语法创建字典:
  1. scores = {'语文': 89, '数学': 92, '英语': 93}
  2. print(scores)
  3. # 空的花括号代表空的dict
  4. empty_dict = {}
  5. print(empty_dict)
  6. # 使用元组作为dict的key
  7. dict2 = {(20, 30):'good', 30:[1,2,3]}
  8. print(dict2)
运行结果为:

{'语文': 89, '数学': 92, '英语': 93}
{}
{(20, 30): 'good', 30: [1, 2, 3]}


可以看到,同一字典中,键值可以是整数、字符串或者元组,只要符合唯一和不可变的特性;对应的值可以是 Python 支持的任意数据类型。

2) 通过 fromkeys() 方法创建字典

Python 中,还可以使用 dict 字典类型提供的 fromkeys() 方法创建所有键值为空的字典,使用此方法的语法格式为:

dictname = dict.fromkeys(list,value=None)

其中,list 参数表示字典中所有键的列表,value 参数默认为 None,表示所有键对应的值。

例如:
  1. knowledge = {'语文', '数学', '英语'}
  2. scores = dict.fromkeys(knowledge)
  3. print(scores)
运行结果为:

{'语文': None, '数学': None, '英语': None}

可以看到,knowledge 列表中的元素全部作为了 scores 字典的键,而各个键对应的值都为空(None)。此种创建方式,通常用于初始化字典,设置 value 的默认值。

3) 通过 dict() 映射函数创建字典

通过 dict() 函数创建字典的写法有多种,表 2 罗列出了常用的几种方式,它们创建的都是同一个字典 a。

表 2 dict() 函数创建字典
创建格式注意事项
>>> a = dict(one=1,two=2,three=3)注意,其中的 one、two、three 都是字符串,但使用此方式创建字典时,字符串不能带引号。
>>> demo = [('two',2),('one',1),('three',3)] #方式1
>>> demo = [['two',2],['one',1],['three',3]] #方式2
>>> demo = (('two',2),('one',1),('three',3)) #方式3
>>> demo = (['two',2],['one',1],['three',3]) #方式4
>>> a = dict(demo)
向 dict() 函数传入列表或元组,而它们中的元素又各自是包含 2 个元素的列表或元组,其中第一个元素作为键,第二个元素作为值。
>>> demokeys = ['one','two','three'] #还可以是字符串或元组
>>> demovalues = [1,2,3] #还可以是字符串或元组
>>> a = dict(zip(demokeys,demovalues))
通过应用 dict() 函数和 zip() 函数,可将前两个列表转换为对应的字典。

注意,无论采用以上哪种方式创建字典,字典中各元素的键都只能是字符串、元组或数字,不能是列表。


如果不为 dict() 函数传入任何参数,则代表创建一个空的字典。例如如下代码:
  1. # 创建空的字典
  2. dict5 = dict()
  3. print(dict5)
运行结果为:

{}

Python 访问字典

和列表、元组不同,它们访问元素都是通过下标,而字典不同,它是通过键来访问对应的元素值。

因为字典中元素是无序的,所以不能像列表、元组那样,采用切片的方式一次性访问多个元素。

例如,如果想访问刚刚建立的字典 a 中,获取元素 1,可以使用下面的代码:

>>> a['one']
1

在使用此方法获取指定键的值时,如果键不存在,则会抛出如下异常:

>>> a['four']
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    a['four']
KeyError: 'four'


另外,除了上面这种方式外,Python 更推荐使用 dict 类型提供的 get() 方法获取指定键的值。get() 方法的语法格式为:

dict.get(key[,default])

其中,dict 指的是所创建的字典名称;key 表示指定的键;default 用于指定要查询的键不存在时,此方法返回的默认值,如果不手动指定,会返回 None。

例如,通过 get() 方法获取字典 a 中“two”对应的值,执行代码如下:

>>> a = dict(one=1,two=2,three=3)
>>>a.get('two')
2


当然,为了防止在获取指定键的值时,因不存在该键而导致抛出异常,在使用 get() 方法时,可以为其设置默认值,这样,即便指定的键不存在,也不回报错。例如:

>>> a = dict(one=1,two=2,three=3)
>>> a.get('four','字典中无此键')
'字典中无此键'

Python删除字典

和删除列表、元组一样,手动删除字典也可以使用 del 语句。例如:

>>> a = dict(one=1,two=2,three=3)
>>> a
{'one': 1, 'two': 2, 'three': 3}
>>> del(a)
>>> a
Traceback (most recent call last):
  File "<pyshell#16>", line 1, in <module>
    a
NameError: name 'a' is not defined

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
系列|七天PYTHON养成记之序列
《计算机二级Python语言程序设计考试》第6章:组合数据类型
python字典常见用法总结
python数据类型入门(四)之元祖和字典
python基础篇:图解Python字典,一目了然的键值对数据结构!
聊一聊|如何准备python程序设计计算机二级考试
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服