字典是包含若干键值对额无序可变序列,每个元素包含了用冒号分隔开的键和值两部分,表示一种映射或对应关系,定义时不同元素用逗号分隔,所有元素放在一对大括号{}中
要注意的是字典中键是python中任意不可变的数据,即整数,实数,复数等,但不能使用列表,集合,字典或其它可变类型作为字典的键,键也不可重复,值却可重复
字典创建与删除
使用赋值运算符‘=’将一个字典赋值给一个变量即可创建一个字典变量
e.g.
aDict = {'sever': 'eee.org', 'data': 'mysql'}
或者我们也可以调用其构造函数用法
x = dict() #空字典
x = {} #空字典
keys = ['a','b','c','d']
values = [1,2,3,4]
dictionary = dict(zip(keys, values)) #根据已有数据创建字典
d = dict(name='Dong', age=39) #以关键参数的形式创建字典
aDict = dict.fromkeys(['name','age','sex'])
#以给定内容为键
#创建值为空的字典
#输出为
#{‘name': None, 'age': None, 'sex' : None}
字典元素的访问
每个元素表示一种映射关系,根据提供的键作为下标可以访问相应的值,如果字典中不存在这个键就会被抛出异常
aDict = {'age':39, 'score':[98,97],'name':'Dong','sex':'male'}
aDict['age'] #输出为39
aDcit['address'] #抛出异常
故一般遇到这种情况,我们需要异常处理结构,简单来说就是条件语句进行判断,如果键在列表中,则输出值,否则打印我们期望输出的提示语句
同时字典对象提供了
get()
方法来返回指定的键对应的值,并且允许指定该键不存在时返回特定的值
aDict.get('age') #输出39
aDcit.get('address', 'Not Existed') #指定的键不存在时返回指定的默认值
#即输出'Not Existed'
setdefault()
用于返回指定键对应的值,如果字典中不存在该键,就添加一个新的元素并设置该键对应的值(设置为None)
aDict.setdefault('address', 'SDIFI') #增加新元素
元素的增删改查
当以指定的键为下标为字典元素赋值时,有两种含义
- 若该键存在,则表示修改该键对应的值
- 若不存在,则表示增加一个新的键值对,也就是增加一个新元素
aDict = {'age':39, 'score':[98,97],'name':'Dong','sex':'male'}
aDict['age] = 35 #修改元素值
aDict['address'] = 'SDIBF' #增加新元素
#输出以及使用的一般不注意其元素顺序
使用update()
可将另一个字典中的键值对全部一次性添加到当前的字典对象,如果两个字典存在相同的键,则以另一个字典的值为准对当前的字典进行更新
e.g.
aDict = {'age':39, 'score':[98,97],'name':'Dong','sex':'male'}
aDict.update({'a':97, 'age':35}) #修改age的值,同时增加新元素a
setdefault()方法也可用来给字典添加新元素
同时删除的话也用del命令
del aDict['age']
字典对象中的pop()和popitem()可以弹出并删除指定的元素
aDict = {'age':39, 'score':[98,97],'name':'Dong','sex':'male'}
aDict.popitem() #弹出一个元素age,对空字典会抛出异常
aDict.pop('sex') #弹出指定键对应的元素
clear()可用来清空字典对象中的所有元素
copy()返回字典中对象的浅复制
标准库collections中与字典相关的类
- OrderedDict类
如果需要一个可以记住元素插入顺序的字典,则使用该类
import collections
x = collections.OrderedDict() #有序字典
x['a'] = 3
x['b'] = 5
x['c']= 8
#输出为OrderedDict([('a',3),('b',5),('c',8)])
- defaultdict类
统计字母出现频率
import string
import random
x = string.ascii_letters + string.digits + stirng.punctuation
z = ' ' .join([random.choice(x) for i in range(1000)])
from collections import defaultdict
frequences = defaultdict(int) #所有默认值为0
for item in z:
frequences[item] += 1 #修改每个字符的频次
- counter类
该类可以更快速的实现这个频率统计问题,并且提供更多的功能
from collections import Counter
frequences = Counter(z) #还是前面的那个字符串对象
frequences.items()
frequences.most_common(1) #返回出现次数最多的一个字符及其频率
frequences.most_common(3) #返回出现次数最多的前三个字符及其频率