python之序列结构 字典(六)

字典是包含若干键值对额无序可变序列,每个元素包含了用冒号分隔开的键和值两部分,表示一种映射或对应关系,定义时不同元素用逗号分隔,所有元素放在一对大括号{}中


要注意的是字典中键是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') #增加新元素

元素的增删改查
当以指定的键为下标为字典元素赋值时,有两种含义

  1. 若该键存在,则表示修改该键对应的值
  2. 若不存在,则表示增加一个新的键值对,也就是增加一个新元素
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) #返回出现次数最多的前三个字符及其频率
发布了78 篇原创文章 · 获赞 181 · 访问量 8695

猜你喜欢

转载自blog.csdn.net/qq_44790423/article/details/100622216
今日推荐