python dict 字典

字典是另一种可变容器模型,且可存储任意类型对象。dict 是python内置的关键字

字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中,相对地,列表(list)和元组(tuple)都是有序的序列,它们的元素在底层是挨着存放的。
字典格式如下所示:

d = {key1 : value1, key2 : value2, key3 : value3 }

字典类型是 Python 中唯一的映射类型。“映射”是数学中的术语,简单理解,它指的是元素之间相互对应的关系,即通过一个元素,可以唯一找到另一个元素。字典中,习惯将各元素对应的索引称为键(key),各个键对应的元素称为值(value),键及其关联的值称为“键值对”。

字典结构示意:

python字典结构

python字典创建

1) 使用 { } 创建字典

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

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

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

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

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

#使用字符串作为key
scores = {'数学': 95, '英语': 92, '语文': 84}
print(scores)

#使用元组和数字作为key
dict1 = {(20, 30): 'great', 30: [1,2,3]}
print(dict1)

#创建空元组
dict2 = {}
print(dict2)

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

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



通过dict() 函数创建字典

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

str 表示字符串类型的键,value 表示键对应的值。使用此方式创建字典时,字符串不能带引号。

# 创建空的字典
d = dict()
print(d)

运行结果为:
{}

python字典元素访问

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

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

dictname[key]

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

请看下面的例子:

tup = (['two',26], ['one',88], ['three',100], ['four',-59])
dic = dict(tup)
print(dic['one'])  #键存在
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() 使用示例:

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

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

a = dict(two=0.65, one=88, three=100, four=-59)
print( a.get('five', '该键不存在') )
运行结果:
该键不存在


python字典元素修改

向字典添加新内容的方法是增加新的键/值对,修改或删除已有键/值对如下实例:

#!/usr/bin/python3

tinydict = {'Name': 'catroom', 'Age': 7, 'Class': 'First'}

tinydict['Age'] = 8               # 更新 Age
tinydict['School'] = "catroom"  # 添加信息

print ("tinydict['Age']: ", tinydict['Age'])
print ("tinydict['School']: ", tinydict['School'])
以上实例输出结果:
tinydict['Age']:  8
tinydict['School']:  catroom


python字典元素删除

能删单一的元素也能清空字典,清空只需一项操作。

显式删除一个字典用del命令,如下实例:

#!/usr/bin/python3

tinydict = {'Name': 'catroom', 'Age': 7, 'Class': 'First'}

del tinydict['Name'] # 删除键 'Name'
tinydict.clear()     # 清空字典
del tinydict         # 删除字典

print ("tinydict['Age']: ", tinydict['Age'])
print ("tinydict['School']: ", tinydict['School'])

但这会引发一个异常,因为用执行 del 操作后字典不再存在:
Traceback (most recent call last):
  File "/runoob-test/test.py", line 9, in <module>
    print ("tinydict['Age']: ", tinydict['Age'])
NameError: name 'tinydict' is not defined


python字典内置函数

len(dict) 计算字典元素个数,即键的总数。

实例:

>>> tinydict = {'Name': 'catroom', 'Age': 7, 'Class': 'First'}
>>> len(tinydict)
3

str(dict) 输出字典,可以打印的字符串表示。

实例:

>>> tinydict = {'Name': 'catroom', 'Age': 7, 'Class': 'First'}
>>> str(tinydict)
"{'Name': 'catroom', 'Class': 'First', 'Age': 7}"

type(variable) 返回输入的变量类型,如果变量是字典就返回字典类型。

实例:

>>> tinydict = {'Name': 'catroom', 'Age': 7, 'Class': 'First'}
>>> type(tinydict)
<class 'dict'>