4.3 字典结构
字典是Python中重要的数据类型,字典的由“键-值”对组成的集合,字典中的“值”通过“键”来引用。
4.3.1 字典的创建
字典由一系列的“键-值”(key-value)对组成,“键-值”对之间用“逗号”隔开,并且被包含在一堆花括号中。字典与java语言中的HashMap类作用类似,都是采用“键-值”对映射的方式存储数据。
字典的创建格式如下:
dictionary={key1:value1, key2:value2,...}
其中,key1、key2等表示字典的key值,value1、value2等表示字典的value值。
如果需要创建一个空的字典,只需要一对花括号即可,代码如下:
dictionary = {}
字典的创建和访问。
dict={"a":"apple","b":"banana","g":"grape","o":"orange"}
print(dict)
print(dict["a"]) #打印建a对应的值
注意:字典的“键”是区分大小写的。例如,dict["a"]与dict["A"]分别指向不同的值,应区别对待。
创建字典时,也可以使用数字作为索引。
dict={1:"apple",2:"banana",3:"grape",4:"orange"}
print(dict)
print(dict[2]) #打印建2对应的值,不用双引号
[root@Dannyserver danny]# python a.py
{: 'apple', : 'banana', : 'grape', : 'orange'}
banana
print()的使用非常灵活,也可以在print()中使用字典。下面示例字典在print()中的使用。
print("%s,%(a)s,%(b)s" %{"a":"apple", "b":"banana"})
[root@Dannyserver danny]# python a.py
{'a': 'apple', 'b': 'banana'},apple,banana
解释:其中隐式的创建了字典{“a”:"apple","b":"banana"}。这个字典用来定制print()中的参数列表。“%s”输出这个字典的内容,"%(a)s"获取字典中对应的key值“a”的value值,“%(b)s”获取字典中对应key值"b"的value值。
4.3.2 字典的访问
字典的访问与元组、列表有所不同,元组和列表是通过数字索引来获取对应的值,而字典是通过key值获取相应的value值。访问字典格式如下:
value = dict[key]
字典的添加、删除和修改非常简单,添加或修改操作只需要编写一条赋值语句,例如:
dict["x"] = "value"
如果索引x不在字典dict的key列表中,字典dict将添加一条新的映射(x:value);如果索引x在字典dict的key列表中,字典dict将直接修改索引x对应的value值。
字典与列表不同,字典并没有remove()操作。字典元素的删除可以调用del()实现,del()属于内建函数,直接调用即可。列表可以调用pop()弹出列表中的一个元素,字典也有一个pop(),该方法的声明和作用与列表的pop()有些不同。pop()的声明如下所示。
D.pop(k[,d]) -> v
pop()必须指定参数才能删除对应的值。其中,参数k表示字典的索引,如果字典D中存在索引k,返回值v等于D[k];如果字典D中没有找到索引k,返回值为d。
如果需要清除字典中所有的内容,可以调用字典的clear()。示例如下:
#字典的添加、删除、修改操作
dict={"a":"apple","b":"banana","g":"grape","o":"orange"}
dict["w"]="watermelon" #添加字典元素
del(dict["a"]) #删除字典中键为a的元素
dict["g"]="grapefruit" #修改字典中键为g的值
print(dict.pop("b")) #弹出字典中键为b的元素
print(dict)
dict.clear() #清除字典中所有元素
print(dict)
[root@Dannyserver danny]# python a.py
banana
{'g': 'grapefruit', 'o': 'orange', 'w': 'watermelon'}
{}
由于字典是无序的,因此字典中没有append()、remove()等方法。如果需要向字典插入新的元素,可以调用setdefault()。
字典的遍历有多种方式,最直接的方式是通过"for...in..." 语句完成遍历的任务。例:
dict={1:"apple",2:"banana",3:"grape",4:"orange"}
for k in dict:
print("dict[%s]" %k,dict[k])
[root@Dannyserver danny]# python a.py
dict[] apple
dict[] banana
dict[] grape
dict[] orange
注意:语句循环访问字典dict,变量k获取的是字典dict的key值,并没有直接获取value值。因此打印输出时,通过dict[k]来获取value值。
此外,还可以使用字典的items()实现字典的遍历操作,items()返回一个由若干元组组成的列表。例:
dict={"a":"apple","b":"banana","c":"grape","d":"orange"}
print(dict.items())
[root@Dannyserver danny]# python a.py
dict_items([('a', 'apple'), ('b', 'banana'), ('c', 'grape'), ('d', 'orange')])
可见,items()把字典中没对key和value组成一个元组,并把这些元组存放在列表中返回。下面将使用字典item()实现字典的遍历。
dict={"a":"apple","b":"banana","c":"grape","d":"orange"}
for(k,v) in dict.items(): #变量k和v分别与字典dict中的key和cvalue值对应
print("dict[%s]" %k,v)
[root@Dannyserver danny]# python a.py
dict[a] apple
dict[b] banana
dict[c] grape
dict[d] orange
除了能采用字符串作为字典的value值,元组、列表甚至字典都可以作为字典的value值。使用元组、列表或字典作为value值创建字典,称为混合型字典。格式如下:
dict={"key1":(tuple), "key2":[list], "key3":[dictionary] ...}
示例:
dict={"a":("apple",),"g":["grape","grapefruit"],"bo":{"b":"banana","o":"orange"}}
print(dict["a"])
print(dict["a"][0])
print(dict["g"])
print(dict["g"][1])
print(dict["bo"])
print(dict["bo"]["b"])
[root@Dannyserver danny]# python a.py
('apple',)
apple
['grape', 'grapefruit']
grapefruit
{'b': 'banana', 'o': 'orange'}
banana