Python dict字典详解(python 字典的字典)

Python字典(dict)是一种无序的、可变的序列,它的元素以“键值对(key-value)”的形式存储。相对地,列表(list)和元组(tuple)都是有序的序列,它们的元素在底层是挨着存放的。

字典类型是Python中唯一的映射类型。“映射”是数学中的术语,简单理解,它指的是元素之间相互对应的关系,即通过一个元素,可以唯一找到另一个元素。如图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)
123复制代码类型:[python]

Python创建字典

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

1)使用{}创建字典

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

使用{}创建字典的语法格式如下:

dictname = {'key':'value1', 'key2':'value2', ..., 'keyn':valuen}1复制代码类型:[java]

其中dictname表示字典变量名,keyn:valuen表示各个元素的键值对。需要注意的是,同一字典中的各个键必须唯一,不能重复。

如下代码示范了使用花括号语法创建字典:

#使用字符串作为key
scores = {'数学': 95, '英语': 92, '语文': 84}
print(scores)
#使用元组和数字作为key
dict1 = {(20, 30): 'great', 30: [1,2,3]}
print(dict1)
#创建空元组
dict2 = {}
print(dict2)123456789复制代码类型:[python]

运行结果为:

{'数学': 95, '英语': 92, '语文': 84}
{(20, 30): 'great', 30: [1, 2, 3]}
{}123复制代码类型:[python]

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

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

Python中,还可以使用dict字典类型提供的fromkeys()方法创建带有默认值的字典,具体格式为:

dictname = dict.fromkeys(list,value=None)1复制代码类型:[python]

其中,list参数表示字典中所有键的列表(list);value参数表示默认值,如果不写,则为空值None。

请看下面的例子:

knowledge = ['语文', '数学', '英语']
scores = dict.fromkeys(knowledge, 60)
print(scores)123复制代码类型:[python]

运行结果为:

{'语文': 60, '英语': 60, '数学': 60}1复制代码类型:[python]

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

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

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

表2 dict()函数创建字典

创建格式

注意事项

a = dict(str1=value1, str2=value2, str3=value3)

str 表示字符串类型的键,value 表示键对应的值。

使用此方式创建字典时,字符串不能带引号。

#方式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
demo = (['two',2], ['one',1], ['three',3])
a = dict(demo)

向 dict() 函数传入列表或元组,而它们中的元素又各自是包含 2 个元素的列表或元组,

其中第一个元素作为键,第二个元素作为值。

keys = ['one', 'two', 'three'] #还可以是字符串或元组
values = [1, 2, 3] #还可以是字符串或元组
a = dict( zip(keys, values) )

通过应用 dict() 函数和 zip() 函数,可将前两个列表转换为对应的字典。

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

如果不为dict()函数传入任何参数,则代表创建一个空的字典,例如:

# 创建空的字典
d = dict()
print(d)123复制代码类型:[python]

运行结果为:

{}1复制代码类型:[python]

Python访问字典

列表和元组是通过下标来访问元素的,而字典不同,它通过键来访问对应的值。因为字典中的元素是无序的,每个元素的位置都不固定,所以字典也不能像列表和元组那样,采用切片的方式一次性访问多个元素。

Python访问字典元素的具体格式为:

dictname[key]1复制代码类型:[python]

其中,dictname表示字典变量的名字,key表示键名。注意,键必须是存在的,否则会抛出异常。

请看下面的例子:

tup = (['two',26], ['one',88], ['three',100], ['four',-59])
dic = dict(tup)
print(dic['one'])  #键存在
print(dic['five'])  #键不存在1234复制代码类型:[python]

运行结果:

88
Traceback (most recent call last):
    File "C:\Users\mozhiyan\Desktop\demo.py", line 4, in 
        print(dic['five'])  #键不存在
KeyError: 'five'12345复制代码类型:[python]

除了上面这种方式外,Python更推荐使用dict类型提供的get()方法来获取指定键对应的值。当指定的键不存在时,get()方法不会抛出异常。

get()方法的语法格式为:

dictname.get(key[,default])1复制代码类型:[python]

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

get()使用示例:

a = dict(two=0.65, one=88, three=100, four=-59)
print( a.get('one') )12复制代码类型:[python]

运行结果:

881复制代码类型:[python]

注意,当键不存在时,get()返回空值None,如果想明确地提示用户该键不存在,那么可以手动设置get()的第二个参数,例如:

a = dict(two=0.65, one=88, three=100, four=-59)
print( a.get('five', '该键不存在') )12复制代码类型:[python]

运行结果:

该键不存在1复制代码类型:[python]

Python删除字典

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

a = dict(two=0.65, one=88, three=100, four=-59)
print(a)
del a
print(a)1234复制代码类型:[python]

运行结果:

{'two': 0.65, 'one': 88, 'three': 100, 'four': -59}
Traceback (most recent call last):
    File "C:\Users\mozhiyan\Desktop\demo.py", line 4, in 
        print(a)
NameError: name 'a' is not defined12345复制代码类型:[python]

Python自带垃圾回收功能,会自动销毁不用的字典,所以一般不需要通过del来手动删除。

开课吧广场-人才学习交流平台

相关文章

python中dict字典的删除方式(python dict删除)

1、使用pop()删除如果有键,则删除,如果没有则会报错,如果不希望出现报错信息,可以在删除的后面添加信息delDict={'name': 'jinxin', '...

Python 中的字典(python中的字典长什么样子)

字典是 Python 中的一种内置数据结构,允许您将数据存储在键值对中。这种类型的数据结构具有高度的通用性,支持基于唯一键高效检索、插入和删除数据。字典非常适合表示结构化数据,其中每个键都可以与特定...

学习编程第197天 python编程pop与popitem方法删除字典数据

今天学习的是刘金玉老师零基础Python教程第92期,主要内容是字典中的删除,pop方法与popitem方法。一、pop方法Pop方法属于字典自带的方法,只需要传入一个参数,这个参数是字典的键,这样就...

经典|Python字典的11个方法超级详解

Python字典是一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。print(dir(dict)) ['clear', 'copy', &#...

Python之容器:字典(dict)就是哈希表换个马甲?

引言从上一篇文章开始,开始了Python中常用的数据结构,也就是容器类的介绍,上一篇文章简要介绍了列表的使用,这一篇文章准备介绍一下Python中字典(dict)的使用。本文的主要内容大概如下:1、简...

Python高效管理JSON文件:读写、更新、删除全攻略

引言:代码对 JSON 文件的常见操作(读取、写入、追加、删除、更新)的封装,每个方法都对常见的异常情况进行了处理,并且提供了详细的错误提示,失败的原因。代码封装如下:import json #to...