数据结构 :映射 mapping
A mapping object maps hashable values to arbitrary objects. Mappings are mutable objects. There is currently only one standard mapping type, the
dictionary
.
字典dict 指定值没有特殊的顺序,都存储在一个特殊的键key中,key可以是数字、字符串、或元组。key是不可变的。
创建字典:
- 字典的创建格式:
>>> d = {key1:value1, key2:value2}
字典由多个键key及其对应的值value构成的对组成的(kye/value对称为项)。每个键/值(kye/value)对用冒号:
分隔开,整个字典包括在大括号{}
中。
空字典(不包含任何项)由两个大括号组成,即{}
。
字典中,键key是唯一的,但值value不一定。值可以取任何数据类型,键必须是不可变的,如字符串、数字或元组。
-
dict()
函数
可以用dict()
函数,通过其他映射(如其他字典)或键/值序列对创建字典.
>>> stu = [('name','小明'),('num','001')]
>>> student = dict(stu)
>>> student
{'name': '小明', 'num': '001'}
dict()
可以通过关键字参数创建字典:
>>> student = dict(name='小明',number='001')
>>> student
{'name': '小明', 'number': '001'}
字典的基本操作
- 修改字典
增加新键值对,修改或删除已有键值对
>>> s = {'小明':'001','小红':'002','小强':'003'}
>>> s['小明'] = '005' # 更新小明的学号
>>> s
{'小明': '005', '小红': '002', '小强': '003'}
>>> s['小东'] = '004' # 添加一个学生
>>> s
{'小明': '005', '小红': '002', '小强': '003', '小东': '004'}
- 删除字典元素
用del
语句可以删除字典的一项,还可以删除整个字典。
>>> s = {'小明': '005', '小红': '002', '小强': '003', '小东': '004'}
>>> del s['小强'] #删除一个学生
>>> s
{'小明': '005', '小红': '002', '小东': '004'}
>>> del s # 删除整个字典
>>> s
Traceback (most recent call last):
File "", line 1, in
s
NameError: name 's' is not defined
- 字典的特性
- 不允许同一个键key出现两次,创建时如果同一个键被赋值两次,后面的值会被记住。
- 将必须是不可变的,如字符串、数字或元组。不能是列表。
-
len()
函数
len(dict)
函数用于计算字典元素的个数,即键的总数。
>>> s = {'小明':'001','小红':'002','小强':'003'}
>>> len(s)
3
-
type()
函数
type(variable)
函数返回输入的变量类型。
>>> s = {'小明':'001','小红':'002','小强':'003'}
>>> type(s)
字典的方法
-
clear()
方法
用于删除字典中的所有项,不需要参数,原地操作,没有返回值(返回值为None
)
>>> s = {'小明':'001','小红':'002','小强':'003'}
>>> s.clear()
>>> s
{}
copy()
方法
返回一个具有相同键值对的新字典,这是方法是浅复制(shallow copy)。不需要参数,返回一个字典的浅复制。
语法:dict.copy()
(注:浅复制 与 深复制)fromkeys()
方法
用于创建一个新字典,以序列seq中元素做字典的键,value为字典所有键对应的初始值。
语法:dict.fromkeys(seq [, value])
value为可选参数
>>> seq = ('home','age','sex')
>>> info = dict.fromkeys(seq)
>>> info
{'home': None, 'age': None, 'sex': None}
>>> info2 = dict.fromkeys(seq,10)
>>> info2
{'home': 10, 'age': 10, 'sex': 10}
-
get()
方法
返回指定键的值,如果值不在字典中,就返回默认值。
语法:dict.get(key, default = None)
>>> s = {'小明':'001','小红':'002','小强':'003'}
>>> s.get("小明")
'001'
-
key in dict
方法
字典中,in操作符用于判断键是否存在于字典中,如果键存在字典中就返回True
,否则返回False
-
items()
方法
以列表返回可遍历的(键,值)元组数组。
语法:dict.items()
>>> s = {'小明':'001','小红':'002','小强':'003'}
>>> s.items()
dict_items([('小明', '001'), ('小红', '002'), ('小强', '003')])
-
keys()
方法
以列表返回一个字典所有键。
语法:dict.keys()
>>> s = {'小明':'001','小红':'002','小强':'003'}
>>> s.keys()
dict_keys(['小明', '小红', '小强'])
-
setdefault()
方法
setdefault()方法与get()方法类似,用于获得与给定的键相关的值,如果键不存在于字典中,就会添加键并将值设为默认值。
语法:dict.setdefault(key, defaukt=None)
>>> s = {'小明':'001','小红':'002','小强':'003'}
>>> s.setdefault('小明')
'001'
>>> s.setdefault('小东')
>>> s
{'小明': '001', '小红': '002', '小强': '003', '小东': None}
-
update()
方法
用于把字典dict2中的键值对更新到dict中。如果有相同的键就会被覆盖。
语法:dict.update(dict2)
>>> s = {'小明': '001', '小红': '002'}
>>> s2 = {'小强': '003', '小东': None}
>>> s.update(s2)
>>> s
{'小明': '001', '小红': '002', '小强': '003', '小东': None}
-
values()
方法
以列表的形式返回字典中所有值。返回的列表中可以包含重复的元素。
语法:dict.values()
>>> s = {'小明': '001', '小红': '002', '小强': '003', '小东': None}
>>> s.values()
dict_values(['001', '002', '003', None])
-
pop(key[,default])
方法
删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
>>> s = {'小明': '001', '小红': '002', '小强': '003', '小东': None}
>>> s.pop('小明')
'001'
-
popitem()
方法
随机返回并删除字典中的一对键和值(一般删除末尾对)。不用传入参数。返回一个键值对(key,value)形式。
>>> s = {'小明': '001', '小红': '002', '小强': '003', '小东': None}
>>> s.popitem()
('小东', None)
>>> s.popitem()
('小强', '003')
>>> s
{'小明': '001', '小红': '002'}