1、字典的创建和元素的添加修改与删除
使用赋值运算符直接赋值
>>> dic = {'A':1,'B':2,'C':3}
>>> dic
{'A': 1, 'C': 3, 'B': 2}
>>>
也可以使用内置函数dict()通过已有数据快速创建字典
>>> keys = ['A','B','C']
>>> values = [1,2,3]
>>> dic = dict(zip(keys,values))
>>> dic
{'A': 1, 'C': 3, 'B': 2}
>>>
也可以使用内置函数dict()根据给定的 键:值 来创建字典
>>> dic = dict(name = 'A',age = 18)
>>> dic
{'age': 18, 'name': 'A'}
>>>
python支持字典推导式快速生成符合条件的字典
>>> dic = {i:str(1) for i in range(5)} #推导式
>>> dic
{0: '1', 1: '1', 2: '1', 3: '1', 4: '1'}
>>> x = ['A','B','C']
>>> y = [1,2,3]
>>> dic = {a:b for a in x for b in y} #这里是各错误的用法,请数据双层虚幻的执行顺序
>>> dic
{'A': 3, 'C': 3, 'B': 3}
>>> dic = {a:b for a,b in zip(x,y)} #推导式
>>> dic
{'A': 1, 'C': 3, 'B': 2}
>>>
2、访问及操作字典元素
>>> person = dict(name = 'lihua',age = 18,classNum = 'A',sex = 'male')
>>> person['name'] #获取元素
'lihua'
>>> person['age'] = 20 #修改元素
>>> person
{'classNum': 'A', 'age': 20, 'name': 'lihua', 'sex': 'male'}
>>> person['adress'] = 'wuhan' #添加元素
>>> person
{'classNum': 'A', 'age': 20, 'adress': 'wuhan', 'name': 'lihua', 'sex': 'male'}
>>> del person['sex'] #删除元素
>>> person
{'classNum': 'A', 'age': 20, 'adress': 'wuhan', 'name': 'lihua'}
>>>
>>>> person.popitem() #使用popitem方法弹出第一个键值对
('classNum', 'A')
>>> person.pop('age') #弹出指定价值对
20
>>>
clear()方法用于清空字典所有的键值对,copy()方法返回字典对象的浅复制
补充一个字典自带的非常好用的方法get()方法,get()方法用来返回指定键对应的值,如果该键不存在,则返回特定的值,避免还要在取值时使用if来判断或者添加异常
>>> dic = {'A':1,'B':2,'C':3}
>>> dic.get('A')
1
>>> dic.get('D','Not Exists.') #当字典中没有当前的key时,返回特定值
'Not Exists.'
>>>
3、案例精选
首先生成一个包含1000个随机字符的字符串,然后统计每个字符出现的次数
>>> import string
>>> import random
>>> x = string.ascii_letters+string.digits+string.punctuation
>>> x
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
>>> y = [random.choice(x) for i in range(1000)] #生成字符列表
>>> z = ''.join(y) #将列表拼接成字符串
>>> d = dict()
>>> for ch in z: #遍历字符串
... d[ch] = d.get(ch,0)+1 #各字符初始次数都为0,找到一个计数加一
...
>>> d
{'$': 8, '(': 11, ',': 12, '0': 13, '4': 14, '8': 11, '<': 13, '@': 10, 'D': 11, 'H': 13, 'L': 16, 'P': 9, 'T': 9, 'X': 17, '\\': 14, '`': 10, 'd': 5, 'h': 11, 'l': 9, 'p': 7, 't': 12, 'x': 15, '|': 3, '#': 9, "'": 7, '+': 9, '/': 10, '3': 14, '7': 11, ';': 6, '?': 4, 'C': 10, 'G': 12, 'K': 11, 'O': 12, 'S': 20, 'W': 12, '[': 9, '_': 10, 'c': 7, 'g': 5, 'k': 6, 'o': 9, 's': 4, 'w': 12, '{': 11, '"': 12, '&': 9, '*': 17, '.': 15, '2': 10, '6': 11, ':': 14, '>': 5, 'B': 9, 'F': 12, 'J': 8, 'N': 11, 'R': 7, 'V': 12, 'Z': 16, '^': 6, 'b': 8, 'f': 14, 'j': 13, 'n': 8, 'r': 12, 'v': 10, 'z': 6, '~': 13, '!': 14, '%': 8, ')': 8, '-': 15, '1': 12, '5': 9, '9': 11, '=': 5, 'A': 11, 'E': 13, 'I': 7, 'M': 9, 'Q': 18, 'U': 7, 'Y': 10, ']': 17, 'a': 11, 'e': 13, 'i': 11, 'm': 8, 'q': 13, 'u': 18, 'y': 10, '}': 11}
>>>
当然,使用collection模块的Counter类也可以快速实现这个功能
>>> from collections import Counter
>>> frequences = Counter(z)
>>> frequences #返回统计结果
Counter({'S': 20, 'Q': 18, 'u': 18, 'X': 17, '*': 17, ']': 17, 'L': 16, 'Z': 16, 'x': 15, '.': 15, '-': 15, '4': 14, '\\': 14, '3': 14, ':': 14, 'f': 14, '!': 14, '0': 13, '<': 13, 'H': 13, 'j': 13, '~': 13, 'E': 13, 'e': 13, 'q': 13, ',': 12, 't': 12, 'G': 12, 'O': 12, 'W': 12, 'w': 12, '"': 12, 'F': 12, 'V': 12, 'r': 12, '1': 12, '(': 11, '8': 11, 'D': 11, 'h': 11, '7': 11, 'K': 11, '{': 11, '6': 11, 'N': 11, '9': 11, 'A': 11, 'a': 11, 'i': 11, '}': 11, '@': 10, '`': 10, '/': 10, 'C': 10, '_': 10, '2': 10, 'v': 10, 'Y': 10, 'y': 10, 'P': 9, 'T': 9, 'l': 9, '#': 9, '+': 9, '[': 9, 'o': 9, '&': 9, 'B': 9, '5': 9, 'M': 9, '$': 8, 'J': 8, 'b': 8, 'n': 8, '%': 8, ')': 8, 'm': 8, 'p': 7, "'": 7, 'c': 7, 'R': 7, 'I': 7, 'U': 7, ';': 6, 'k': 6, '^': 6, 'z': 6, 'd': 5, 'g': 5, '>': 5, '=': 5, '?': 4, 's': 4, '|': 3})
>>> frequences.most_common(1) #返回频次最多的一个字符及及频次
[('S', 20)]
>>> frequences.most_common(3) #返回频次top3
[('S', 20), ('Q', 18), ('u', 18)]
>>>
4、globals()和locals()分别返回包含当前作用域内的所有全局变量各局部变量的名称及其值的字典
>>> a = [1,2,3]
>>> b = 'hello world'
>>> def demo():
... a = 3
... b = [1,2,3]
... print('locals',locals())
... print('globals',globals())
...
>>> demo()
5、有序字典
python内置的字典键值对是无序的,可以用collections中的OrderedDict,例如
>>> import collections
>>> x = collections.OrderedDict()
>>> x['A'] = 2
>>> x['B'] = 1
>>> x['C'] = 3
>>> x
OrderedDict([('A', 2), ('B', 1), ('C', 3)])
>>>
6、字典排序
内置函数sorted()可以实现对字典元素的排序,充分利用key参数可以进行非常丰富的排序
>>> score = {'yuwen':88,'shuxue':90,'yinyu':68}
>>> from operator import itemgetter
>>> sorted(score.items(),key=itemgetter(1)) #按照值进行排序
[('yinyu', 68), ('yuwen', 88), ('shuxue', 90)]
>>> sorted(score.items(),key=itemgetter(0)) #按照键值排序
[('shuxue', 90), ('yinyu', 68), ('yuwen', 88)]
>>> sorted(score.items(),key=itemgetter(1),reverse=False) #升序
[('yinyu', 68), ('yuwen', 88), ('shuxue', 90)]
>>> sorted(score.items(),key=itemgetter(1),reverse=True) #降序
[('shuxue', 90), ('yuwen', 88), ('yinyu', 68)]
>>>
>>>