python序列之字典
在Python中字典与列表类似,也是可变序列,但是与列表不同,它是无序的可变序列,保存的内容是以键-值对的形式存在的。
字典的主要特征如下:
1、通过键来读取值而不是通过索引:字典有时候也称为关联数组或者散列表(hash),通过键将一系列值联系起来,这样就可以通过键来获取值而不是通过索引
2、字典是任意对象的无序集合:字典是无序的,各项从左到右排序是随机的,没有特定的顺序,这样可以提高查找效率
3、字典是可变的,并且可以嵌套:字典可以增长或者缩短,并且它的值可以是列表或者其他字典。
4、字典的键必须唯一:不允许同一个键出现两次,如果出现两次,则以后一个值为准。
5、字典中的键必须不可变:因此字典中的键可以使用数字、元组、字符串,但是不能使用列表。
一、字典的创建和删除:
定义字典的时候,每个元素都包含两个部分”键”和”值”,键和值之间使用逗号分隔,所有元素放在一对{}中,语法格式如下:
dictionary = {‘key1′:’value1′,’key2′:’value2′,’key3′,’value3’,}
dictionary表示字典的名称,key1…表示元素的键,必须唯一不可变,value1…表示元素的值,可以是任何数据类型,值不是必须唯一。
例如:创建一个字典,并打印字典元素,如图:

也可以创建空字典,可使用下面两种方法创建空字典,dictionary = {}或者dictionary = dict()
在Python中,dict()方法除了可以创建一个空字典外,还可以通过已有数据快速创建字典,主要表现为以下两种方式:
1、通过映射函数创建字典:语法格式如下:
dictionary = dict(zip(list1,list2))
dictionary表示字典名,zip()函数用于将多个列表或元组中对应位置的元素结合为元组,并返回包含这些内容的zip对象,如果想获取元组,可以将zip对象通过tuple()函数转换为元组,如果想获取列表,可通过list()将其转换为列表。list1,一个列表,指定要生成字典的键,list2:一个列表,指定要生成字典的值。
例如:通过映射函数创建字典,并转换为元组和列表,如图:

2、通过给定的键值对创建字典:语法格式如下
dictionary = dict(key1=value1,key2=value2…….)
例如:通过给定的键值对创建字典,执行命令如下:

python中,还可以使用dict()对象的fromkeys()方法创建键值为空的字典,格式如下:
dictionary = dict.fromkeys(list1)
其中dictionary表示字典名,list1表示指定为键的列表
例如:创建一个只包括名字的字典,执行命令如下:

还可以通过已经存在的元组和列表创建字典
例如:创建一个保存名字的元组和保存星座的列表,通过他们创建字典,如图:

上图中可以看出,元组作为字典的键,如果重新创建一个保存姓名的列表,通过此列表再次创建字典将会报错,因为字典的键不可修改,而列表是可以修改的。
同列表以及元组一样,不使用的字典也可以通过del语句删除,语法格式为:del dictionary
如果想删除字典的全部元素,可以使用字典对象的clear()方法实现,执行clear()方法后,原字典将变成空字典,语法格式如下:dictionary.clear()
还可以通过pop()方法删除指定的键,并返回键对应的值,如图:

使用字典对象的popitem()方法删除元素,并返回被删除的元素。如图:

二、通过键值对访问字典:
在Python中如果要直接打印字典中的元素,可以使用print()打印即可,但是在实际使用的时候,一般是获取指定的元素,此时跟列表以及元组不同,不是通过索引,而是通过键来获取,但是如果指定的键不存在就会报出错误,此时需要加一条判断,如图:

上图中的if方法不常用,python中推荐的方法是使用字典对象的get()方法获取指定的键的值,语法格式如下:
dictionary.get(key[,default])
key为指定的键,default为可选项,用于当指定的键不存在时返回一个默认值,如果不指定这返回none
例如:通过字典对象get()方法获取指定键的值,并设置当键不存在时返回默认值

注:如果指定的键可能不存在,应该考虑使用get()方法
三、遍历字典:
字典是以键值对的形式存在,所以需要通过键值对进行获取
1、字典也可以使用in关键字来获取键,但是此关键字只能获取键,不能获取值,如图:

运行结果如下:

2、下面例子先遍历列表,然后判断列表中元素是否在字典中,如果在,打印,如图:


3、使用not in 来判断元素是否不在字典中,修改上述代码,如图:

运行结果如下:

4、还通过字典对象的items()方法可以获取字典的键值对列表,语法格式如下:dictionary.items(),如果想要获取具体的键值对信息,可以使用for循环进行获取,如图:

上图中获取的是元素的内容,如果想要获取具体的每个键和每个值,可以使用如下命令:

在python中字典对象还提供了values()和keys()方法,用于返回字典的值和键列表,用法和items()相似,也需要通过for循环来进行遍历。
5、下面例子表示遍历字段,并使用sorted方法进行排序,如图:

运行结果如下,可以看到字典的键已经进行了排序,如图:

四、添加删除和修改字典元素:
1、向字典中添加元素
字典是可变序列,因此可以随时向字典中添加元素,语法格式如下:
dictionary[key] = value
例如:通过可迭代对象方式创建字典,然后向字典中添加元素,如图:

打印结果如下:可以看到字典中添加了一个键位keyy的元素,如图:

再次通过命令向字典中添加了一个键为keyy的元素,如图:

执行打印后,可以看到keyy原来的值已经被替换为最新的,相当于修改了字典中的元素,如图:

2、使用del删除字典元素
当字典不在使用的时候,可以使用del语句将其删除,语法格式如下:del dictionary,也可以单独删除字典中的每个元素,如图:

3、使用pop()删除字典元素


从上图看出,删除字典元素之前先进行了判断元素是否存在,可以避免元素不存在报错
五、给字典设置默认值
1、下面使用not in判断元素是否不在字典中,如果不在设置默认值,如图:

运行结果如下:

2、除了使用not in判断后赋值,还可以使用自带的方法setdefault来设置默认值,如图:

注意:如果字典中已经存在了此key,那么setdefault设置的并不会生效
六、字典推导式:
使用字典推导式可以快速生成一个字典,表现形式和列表推导式相似
例如:生成包含四个随机数的字典,执行代码如下:

根据字符串列表来生成一个字典,如图:


附件:
将json数据转换为字典,执行命令如下:
json.loads(var) #其中var表示json数据
将字典转换为字符串,执行命令如下:
json.dumps(var) #其中var表示字典


