1、字典(Dict)
和列表,元组通过下标序列来索引元素不同,字典使用「键值对」的形式来存储数据,通过键来索引值,创建字典时,键不能重复,重复后面的会覆盖!因为键必须不可变,所以键可用数字,字符串或元组,但是不能用列表!使用「:冒号」分隔键与值,多个键值对用「,逗号」分隔;字典 也是支持嵌套的!另外还有一点要注意:字典是无序的!!!
① 字典创建
可以用过「大括号」直接构造或者通过 dict()函数
和 fromkeys()函数
进行构造,代码示例如下:
# 直接通过大括号进行创建 dict_1 = {} # 定义一个空字典 dict_2 = {'a': 1, 'b': 2, 3: "c"} # 定义一个普通字典 dict_3 = dict_2.copy() # 浅复制一个字典 # 通过dict函数创建字典 dict_4 = dict(a=1, b=2, c=3) dict_5 = dict(zip(['a','b','c'],(1,2,3))) dict_6 = dict([('a',1),('b',2),('c',3)]) # 通过fromkeys创建并返回新的字典,有两个参数,键和键对应的值 # 值可以不提供,默认None,不过有个输出结果要注意一下!!! dict_7 = {}.fromkeys(['a','b','c'],[1,2,3]) # 输出字典: print('dict_1:%s' % dict_1) print('dict_2:%s' % dict_2) print('dict_3:%s' % dict_3) print('dict_4:%s' % dict_4) print('dict_2:%s' % dict_5) print('dict_3:%s' % dict_6) print('dict_4:%s' % dict_7)
运行结果如下:
dict_1:{} dict_2:{'a': 1, 'b': 2, 3: 'c'} dict_3:{'a': 1, 'b': 2, 3: 'c'} dict_4:{'a': 1, 'b': 2, 'c': 3} dict_5:{'a': 1, 'b': 2, 'c': 3} dict_6:{'a': 1, 'b': 2, 'c': 3} dict_7:{'a': [1, 2, 3], 'b': [1, 2, 3], 'c': [1, 2, 3]}
② 访问字典中的元素
代码示例如下:
# 通过键查询对应的值,如果没有这个键会报错TypeError print(dict_1['b']) # 通过get()方法查询键对应的值,没有的话默认返回None,你也可以改成返回其他值 print(dict_1.get('d')) # 和get()类似,如果找不到键的话会自动添加键,并赋值None print(dict_1.setdefault('d')) print(dict_1) # 判断字典中是否有某个键 print('d' in dict_1) print(dict_1.__contains__('d')) # 获得字典里所有的键 print(dict_1.keys()) # 获得字典里所有的值 print(dict_1.values()) # 获得字典里所有的键值对 print(dict_1.items())
运行结果如下:
2 None None {'a': 1, 'b': 2, 3: 'c', 'd': None} True True dict_keys(['a', 'b', 3, 'd']) dict_values([1, 2, 'c', None]) dict_items([('a', 1), ('b', 2), (3, 'c'), ('d', None)])
③ 修改字典
代码示例如下:
dict_1 = {'a': True, 'b': 2, 3: "c"} dict_1['b'] = 'HaHa' print(dict_1) # 把别的字典里的键值对更新到字典里 dict_1.update({'d':'Pig', 'e':'1'}) print(dict_1)
运行结果如下:
{'a': True, 'b': 'HaHa', 3: 'c'} {'a': True, 'b': 'HaHa', 3: 'c', 'd': 'Pig', 'e': '1'}
④ 字典遍历
代码示例如下:
dict_1 = {'a': True, 'b': 2, 3: "c"} # 方法一 for d in dict_1: print("%s:%s," % (d, dict_1.get(d)),end='') # 方法二 for (k, v) in dict_1.items(): print("%s:%s," % (k, v),end='')
运行结果如下:
a:True,b:2,3:c, a:True,b:2,3:c,
⑤ 有序字典
上面也说了Python中默认的字典是无序的,即:遍历字典取出元素的顺序不确定,因为元素时按Hash来存储的。但是有时,有些应用场景,我们希望遍历字典取出元素的顺序和我们保存元素进去的顺序一致,可以直接利用Python内置的collection模块里的子类「OrderedDict」,实现对字典元素的排序。使用代码示例如下:
from collections import OrderedDict dict_2 = OrderedDict() dict_2[1] = 'a' dict_2[2] = 'b' dict_2[3] = 'c' dict_2[4] = 'd' dict_2[5] = 'e' for (k, v) in dict_2.items(): print("%s:%s," % (k, v),end='')
运行结果如下:
1:a,2:b,3:c,4:d,5:e,