*运维架构师-Python 自动化运维开发-019

九、标准数据类型

6、Dictionary(字典)

字典(dictionary)是Python中另一个非常有用的内置数据类型。是另一种可变容器模型,且可存储任意类型对象。列表是有序的对象集合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。

字典是一种映射类型,字典用 { } 标识,它是一个无序的 键(key) : 值(value) 的集合。

键(key)必须使用不可变类型。

在同一个字典中,键(key)必须是唯一的。

字典实例:

#!/usr/bin/python3
dict1 = {}
dict1['one'] = "1 - hello"
dict1[2] = "2 - nihao"
tinydict = {'name': 'hello','code':1, 'site': 'nihao'}
print (dict1['one']) # 输出键为 'one' 的值
print (dict1[2]) # 输出键为 2 的值
print (tinydict) # 输出完整的字典
print (tinydict.keys()) # 输出所有键
print (tinydict.values()) # 输出所有值

以上实例输出结果:

1 - hello

2 - nihao

{'name': 'hello', 'code': 1, 'site': 'nihao'}

dict_keys(['name', 'code', 'site'])

dict_values(['hello', 1, 'nihao'])

构造函数 dict() 可以直接从键值对序列中构建字典如下:

>>>dict([('Runoob', 1), ('Google', 2), ('Taobao', 3)])

{'Taobao': 3, 'Runoob': 1, 'Google': 2}

>>> {x: x**2 for x in (2, 4, 6)}

{2: 4, 4: 16, 6: 36}

>>> dict(Runoob=1, Google=2, Taobao=3)

{'Runoob': 1, 'Google': 2, 'Taobao': 3}

另外,字典类型也有一些内置的函数,例如clear()、keys()、values()等。

注意:1、字典是一种映射类型,它的元素是键值对。

2、字典的关键字必须为不可变类型,且不能重复。

3、创建空字典使用 { }。

字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:

d = {key1 : value1, key2 : value2 }

键必须是唯一的,但值则不必。

值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。

一个简单的字典实例:

dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}

也可如此创建字典:

dict1 = { 'abc': 456 };

dict2 = { 'abc': 123, 98.6: 37 };

1、访问字典里的值

把相应的键放入到方括号中,如下实例:

#!/usr/bin/python3

dict = {'Name': 'Baidu', 'Age': 7, 'Class': 'First'}

print ("dict['Name']: ", dict['Name'])

print ("dict['Age']: ", dict['Age])

以上实例输出结果:

dict['Name']: Baidu

dict['Age']: 7

如果用字典里没有的键访问数据,会输出错误如下:

#!/usr/bin/python3

dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}

print ("dict['Alice']: ", dict['Alice'])

以上实例输出结果:

Traceback (most recent call last):

File "test.py", line 5, in

print ("dict['Alice']: ", dict['Alice'])

KeyError: 'Alice'

2、修改字典

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

#!/usr/bin/python3

dict = {'Name': 'Baidu', 'Age': 7, 'Class': 'First'}

dict['Age'] = 8 # 更新 Age

dict['School'] = "qianfeng" # 添加信息

print ("dict['Age']: ", dict['Age'])

print ("dict['School']: ", dict['School'])

以上实例输出结果:

dict['Age']: 8

dict['School']: qianfeng

3、删除字典元素

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

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

#!/usr/bin/python3

dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}

del dict['Name'] # 删除键 'Name'

dict.clear() # 清空字典

del dict # 删除字典

print ("dict['Age']: ", dict['Age'])

print ("dict['School']: ", dict['School'])

但这会引发一个异常,因为用执行 del 操作后字典不再存在:

Traceback (most recent call last):

File "test.py", line 9, in

print ("dict['Age']: ", dict['Age'])

TypeError: 'type' object is not subscriptable

注:del() 方法后面也会讨论。

4、字典键的特性

字典值可以是任何的 python 对象,既可以是标准的对象,也可以是用户定义的,但键不行。

两个重要的点需要记住:

1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住,如下实例:

#!/usr/bin/python3
dict = {'Name': 'qianfeng', 'Age': 7, 'Name': 'xueyuan'}
print ("dict['Name']: ", dict['Name'])
以上实例输出结果:
dict['Name']: xueyuan
2)键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行,如下实例:
#!/usr/bin/python3
dict = {['Name']: 'Baidu', 'Age': 7}
print ("dict['Name']: ", dict['Name'])
以上实例输出结果:
Traceback (most recent call last):
File "test.py", line 3, in 
dict = {['Name']: 'Runoob', 'Age': 7}
TypeError: unhashable type: 'list'
5、字典内置函数&方法
Python字典包含了以下内置函数:
len(dict) 计算字典元素个数,即键的总数
>>> dict = {'Name': 'Baidu', 'Age': 7, 'Class': 'First'}
>>> len(dict)
3
str(dict) 输出字典,以可打印的字符串表示
>>> dict = {'Name': 'Baidu', 'Age': 7, 'Class': 'First'}
>>> str(dict)
"{'Name': 'Baidu', 'Class': 'First', 'Age': 7}"
type(variable) 返回输入的变量类型,如果变量是字典就返回字典类型
>>> dict = {'Name': 'Baidu', 'Age': 7, 'Class': 'First'}
>>> type(dict)
Python字典包含了以下内置方法:

3、Python数据类型转换

有时候,我们需要对数据内置的类型进行转换,数据类型的转换,你只需要将数据类型作为函数名即可。

以下几个内置的函数可以执行数据类型之间的转换