字典
字典是一种通过关键字引用的数据结构,是一种key-value的形式,其主要利用hash的方式存储数据,复杂度为O(1),查询速度极快,就像字典一样,通过目录便可找到单词对应的页数,不用像list一样,逐条查找。
创建
dict ={
'name':'xiaoming',
'id':20,
'course':{
'c++':80,
'java':82,
'python':90
}
}
上述例子中,键和值都是用冒号(:)将其隔离开,每一对之间用逗号(,)分割,整体都记在{}中
注意:
1.字典的键必须唯一,不能修改; 2.值可取任何类型,同样不允许修改,比如字符串、数字或元祖
字典的增删改查
访问字典里的值
print "dict['name']:", dict['name']
# 结果
dict['name']: xiaoming
当然,如果字典中没有对应的键,会报错,可自行实验
修改字典
print "dict['id']:",dict['id']
dict['id'] = 25
print "dict['id']:",dict['id']
# 结果
dict['id']: 20
dict['id']: 25
删除字典数据
del dict['id']
print "dict['id']:",dict['id']
# 结果
KeyError: 'id'
dict['id']:
增加字典数据
dict['age']=20
print dict
# 结果
{'course': {'python': 90, 'java': 82, 'c++': 80}, 'age': 20, 'name': 'xiaoming', 'id': 20}
字典特性
- 不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住
- 键必须不可变,所以可以用数字,字符串或元组充当,列表完全不行
字典的内置方法
- cmp(dict1, dict2)
如果两个字典的元素相同返回0,如果字典dict1大于字典dict2返回1,如果字典dict1小于字典dict2返回-1
dict1={'name':'xiaoming'}
dict2={'name':'xiaoming'}
dict3={'name':'xiaomings'}
dict4={'name':'ao'}
print cmp(dict1,dict2)
print cmp(dict1,dict3)
print cmp(dict1,dict4)
# 结果
0
-1
1
- len(dict)
计算字典的长度,也就是字典key的个数
- str(dict)
字典转成可打印的字符串形式
- type(dic)
返回字典的类型
- dict.get(key, default=None)
返回key指定的值,如果没有key返回默认值
print dict.get('name')
print dict.get('age',20)
# 结果
xiaoming
20
- dict.setdefault(key, default=None)
和get类似,但如果键不存在于字典中,将会添加键并将值设为default,而get并不填加
print dict.get('name')
print dict.get('age',20)
print dict
print dict.setdefault('age',20)
print dict
# xiaoming
20
{'course': {'python': 90, 'java': 82, 'c++': 80}, 'name': 'xiaoming', 'id': 20}
20
{'course': {'python': 90, 'java': 82, 'c++': 80}, 'age': 20, 'name': 'xiaoming', 'id': 20}结果
- dict.has_key(key)
如果键在字典dict里返回true,否则返回false
- dict.keys()
以列表返回一个字典所有的键
- dict.values()
以列表返回字典中的所有值
- dict.items()
以列表返回可遍历的(键, 值) 元组数组
for key,value in dict.items():
print key,':',value
# 结果
course : {'python': 90, 'java': 82, 'c++': 80}
name : xiaoming
id : 20
- dict.update(dict2)
将字典dict2更新到dict里
dict.update({'id':30})
print dict
# 结果
{'course': {'python': 90, 'java': 82, 'c++': 80}, 'name': 'xiaoming', 'id': 30}
- dict.pop(key[,default])
删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
print dict.pop('name')
print dict
print dict.pop('age',30)
# 结果
xiaoming
{'course': {'python': 90, 'java': 82, 'c++': 80}, 'id': 20}
30
- dict.copy()
返回一个字典的浅复制,复制时只会复制父对象,而不会复制对象的内部的子对象,原字典和拷贝字典未完全分离,指向一处,当原字典发生改变,拷贝字典同样改变
dict_copy = dict.copy()
print "new:",dict_copy
del dict['course']['python']
print "old:",dict
print "new:",dict_copy
# 结果
new: {'course': {'python': 90, 'java': 82, 'c++': 80}, 'name': 'xiaoming', 'id': 20}
old: {'course': {'java': 82, 'c++': 80}, 'name': 'xiaoming', 'id': 20}
new: {'course': {'java': 82, 'c++': 80}, 'name': 'xiaoming', 'id': 20}
- dict.clear()
删除字典内所有元素
- dict.fromkeys(seq[, value])
创建一个新字典,以序列 seq中元素做字典的键,value 为字典所有键对应的初始值,其中seq必须,value是可选参数,设置键序列seq的值
- dict.popitem()
随机返回并删除字典中的一对键和值
print dict
print dict.popitem()
print dict
# 结果
{'course': {'python': 90, 'java': 82, 'c++': 80}, 'name': 'xiaoming', 'id': 20}
('course', {'python': 90, 'java': 82, 'c++': 80})
{'name': 'xiaoming', 'id': 20}