首页 > 编程语言 >Python dict字典详解

Python dict字典详解

时间:2022-10-17 20:56:37浏览次数:87  
标签:Python 元素 元组 详解 dict print 字典

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

字典类型是 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) 使用 { } 创建字典

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

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

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

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

如下代码示范了使用花括号语法创建字典:
  1. #使用字符串作为key
  2. scores = {'数学': 95, '英语': 92, '语文': 84}
  3. print(scores)
  4. #使用元组和数字作为key
  5. dict1 = {(20, 30): 'great', 30: [1,2,3]}
  6. print(dict1)
  7. #创建空元组
  8. dict2 = {}
  9. print(dict2)
运行结果为:

{'数学': 95, '英语': 92, '语文': 84}
{(20, 30): 'great', 30: [1, 2, 3]}
{}

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

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

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

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

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

请看下面的例子:
  1. knowledge = ['语文', '数学', '英语']
  2. scores = dict.fromkeys(knowledge, 60)
  3. print(scores)
运行结果为:

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

可以看到,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() 函数传入任何参数,则代表创建一个空的字典,例如:
  1. # 创建空的字典
  2. d = dict()
  3. print(d)
运行结果为:

{}

Python 访问字典

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

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

dictname[key]

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

请看下面的例子:
  1. tup = (['two',26], ['one',88], ['three',100], ['four',-59])
  2. dic = dict(tup)
  3. print(dic['one']) #键存在
  4. print(dic['five']) #键不存在
运行结果:

88
Traceback (most recent call last):
    File "C:\Users\mozhiyan\Desktop\demo.py", line 4, in <module>
        print(dic['five'])  #键不存在
KeyError: 'five'


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

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

dictname.get(key[,default])

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

get() 使用示例:
  1. a = dict(two=0.65, one=88, three=100, four=-59)
  2. print( a.get('one') )
运行结果:

88


注意,当键不存在时,get() 返回空值 None,如果想明确地提示用户该键不存在,那么可以手动设置 get() 的第二个参数,例如:
  1. a = dict(two=0.65, one=88, three=100, four=-59)
  2. print( a.get('five', '该键不存在') )
运行结果:

该键不存在

Python删除字典

和删除列表、元组一样,手动删除字典也可以使用 del 关键字,例如:
  1. a = dict(two=0.65, one=88, three=100, four=-59)
  2. print(a)
  3. del a
  4. print(a)
运行结果:

{'two': 0.65, 'one': 88, 'three': 100, 'four': -59}
Traceback (most recent call last):
    File "C:\Users\mozhiyan\Desktop\demo.py", line 4, in <module>
        print(a)
NameError: name 'a' is not defined

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

标签:Python,元素,元组,详解,dict,print,字典
From: https://www.cnblogs.com/qlsh/p/16800619.html

相关文章

  • Python set集合详解
    Python 中的集合,和数学中的集合概念一样,用来保存不重复的元素,即集合中的元素都是唯一的,互不相同。从形式上看,和字典类似,Python集合会将所有元素放在一对大括号{}中,相邻......
  • Python dict字典方法完全攻略(全)
    我们知道,Python 字典的数据类型为dict,我们可使用 dir(dict) 来查看该类型包含哪些方法,例如:>>>dir(dict)['clear','copy','fromkeys','get','items','keys','po......
  • Python类型转换,Python数据类型转换函数大全
    虽然 Python 是弱类型编程语言,不需要像 Java 或C语言那样还要在使用变量前声明变量的类型,但在一些特定场景中,仍然需要用到类型转换。比如说,我们想通过使用print()......
  • Python转义字符及用法
    在《Python字符串》一节中我们曾提到过转义字符,就是那些以反斜杠\开头的字符。ASCII编码为每个字符都分配了唯一的编号,称为编码值。在 Python 中,一个ASCII字符除了可......
  • Python算术运算符及用法详解
    算术运算符也即数学运算符,用来对数字进行数学运算,比如加减乘除。下表列出了 Python 支持所有基本算术运算符。表1Python常用算术运算符运算符说明实例结果+加1......
  • Python位运算符详解
    Python 位运算按照数据在内存中的二进制位(Bit)进行操作,它一般用于底层开发(算法设计、驱动、图像处理、单片机等),在应用层开发(Web开发、Linux运维等)中并不常见。想加快学习......
  • Python赋值运算符(入门必读)
    赋值运算符用来把右侧的值传递给左侧的变量(或者常量);可以直接将右侧的值交给左侧的变量,也可以进行某些运算后再交给左侧的变量,比如加减乘除、函数调用、逻辑运算等。Python......
  • Python比较运算符(关系运算符)
    比较运算符,也称关系运算符,用于对常量、变量或表达式的结果进行大小比较。如果这种比较是成立的,则返回True(真),反之则返回False(假)。True和False都是bool类型,它们专门......
  • Python逻辑运算符及其用法
    高中数学中我们就学过逻辑运算,例如p为真命题,q为假命题,那么“p且q”为假,“p或q”为真,“非q”为真。Python 也有类似的逻辑运算,请看下表:表1Python逻辑运算符及功能......
  • Python三目运算符(三元运算符)用法详解
    我们从一个具体的例子切入本节内容。假设现在有两个数字,我们希望获得其中较大的一个,那么可以使用ifelse语句,例如:ifa>b:max=a;else:max=b;但是 Python ......