Python笔记精讲之字典

定义

字典是“键-值对“的无序可变序列,字典中每个元素都包含两部分:“键”和“值”。定义字典时,每个元素的“键”和“值”用冒号分隔,相邻元素之间用逗号分隔,所有元素放在一对大括号({})内。
字典中的键可以是python中任意不可变数据:整数,实数,复数,字符串,元组,不可使用列表、集合和字典。键不允许重复。

字典创建和删除

使用=将一个字典赋值给一个变量即可创建一个字典变量。
例如:

dict={'ip':'192.178",'host':'bigdata'}

使用内置函数dict()通过已有数据快速创建字典:

keys=['a','b','c','d']
values=[1,2,3,4]
dic=dict(zip(keys,values))
创建一个空字典:
x=dict()
x={}

使用内置函数dict()根据给定的“键值对”来创建字典:

d=dict(name="jay",age=3)

给定内容为“键”,值为空的字典:

dic=dict.fromkeys(['name','age','sex'])

字典元素的读取

推荐使用get()方法

a={'name':'cat','sex':'male','age':7}
a.get('name')
a.get('address','China')  #取address的值,要是不存在,赋值为China

#添加一个score字段
a['score']=a.get('score',[])
a['score'].append(98)
a['score'].append(97)

使用字典的items()方法可以返回字典的“键值对”列表,使用字典对象的key()方法可以返回字典的“键”列表,使用values()方法可以返回字典的“值”列表。

>>> for item in a.items():
...     print(item)
... 
('name', 'cat')
('sex', 'male')
('age', 7)

>>> for key in a:
...     print (key)
... 
name
sex
age

>>> for key,value in a.items():
...     print(key,value)
... 
name cat
sex male
age 7

字典元素的添加与修改

当以指定的“键”为下标为字典元素赋值时,若该“键”存在,则表示修改该“键”的值,若不存在,则表示添加一个新的“键值对”,也就是添加一个新的元素。

>>> a
{'name': 'cat', 'sex': 'male', 'age': 7}
>>> a['age']=8
>>> a
{'name': 'cat', 'sex': 'male', 'age': 8}

使用字典对象的update()方法将另一个字典的“键值对”一次性全部添加到当前字典对象,如果两个字典中存在相同的“键”,则以另一个字典中的“值”为准对当前字典进行更新。

>>> a.update({'address':'NorthEasten','hobby':'endless love'})
>>> a
{'name': 'cat', 'sex': 'male', 'age': 8, 'address': 'NorthEasten', 'hobby': 'endless love'}
>>> a.update({'name':'ocean','weight':60})
>>> a
{'name': 'ocean', 'sex': 'male', 'age': 8, 'address': 'NorthEasten', 'hobby': 'endless love', 'weight': 60}

删除

删除元素时,可以使用del命令删除字典中制定“键”对应的元素,或使用字典对象的clear()方法来删除字典中所有的元素,还可以使用字典对象的pop()方法删除并返回指定”键“的元素,或者使用字典对象的popitem()方法删除并返回字典中的一个元素。

>>> del(a['age'])
>>> a
{'name': 'ocean', 'sex': 'male', 'address': 'NorthEasten', 'hobby': 'endless love', 'weight': 60}
>>> a.pop('hobby')
'endless love'
>>> a.popitem()
('weight', 60)
>>> a.popitem()
('address', 'NorthEasten')

字典应用案例–字符统计

首先生成包含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

>>> for key,value in d.items():
...     print(key,value)
... 
Y 24
Z 42
+ 22
B 18
t 18
1 20
n 28
6 16
z 30

使用collections模块Counter类可以快速实现这个功能,并且能够满足其他需求,例如查找出现次数最多的元素:

>>> from collections import Counter
>>> freq=Counter(z)
>>> freq.items()
>>> freq.most_common(1)
[(' ', 999)]
>>> freq.most_common(3)
[(' ', 999), ('Z', 21), ('w', 19)]

类似与列表推导式,Python也支持字典推导式快速生成符合特定条件的字典。

{1: '1', 2: '2', 3: '3', 4: '4'}
>>> x=['a','b','c','d']
>>> y=[1,2,3,4]
>>> {i:j for i,j in zip(x,y)}
{'a': 1, 'b': 2, 'c': 3, 'd': 4}

有序字典

Python内置字典是无序的,如果需要一个可以记住元素插入顺序的字典,可以使用collections.OrderedDict.

>>> import collections
>>> x=collections.OrderedDict()
>>> x['a']=7
>>> x['f']=4
>>> x['c']=6
>>> x['b']=11
>>> x
OrderedDict([('a', 7), ('f', 4), ('c', 6), ('b', 11)])
>>> type(x)

你可能感兴趣的:(Python)