字典dict

字典使用键-值(key-value)存储,在一个字典中键必须相互不同。

字典具有很快的速度,因为使用了key-value存储方式,在放进去的时候会根据key算出vlaue的存放位置,这样根据key可以直接定位到value

序列是以连续的整数为索引,与字典不同的是,字典以关键字为索引,关键字可以是任意不可变对象(不可修改),通常是字符串或数值,这也保证了value的存储位置不会变化。

由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉。

需要占用大量的内存,内存浪费多。

一、定义字典

>>> name={'zhangsan':90,'lisi':80,'wangwu':70}

使用大括号括起来,键和值用冒号分隔,多个键-值用逗号分隔,一个键只能对应一个值。

 

二、基本操作

#返回所有键值

>>> name.items()
[('lisi', 80), ('zhangsan', 90), ('wangwu', 70)]

#返回所有键

>>> name.keys()
['lisi', 'zhangsan', 'wangwu']

#返回所有值

>>> name.values()
[80, 90, 70]

注意:以上返回的结果都是以列表的形式

 

#添加键值

>>> name['zhaoliu']=60
>>> name
{'lisi': 80, 'zhaoliu': 60, 'zhangsan': 90, 'wangwu': 70}

#获取单个键的值

>>> name['zhangsan']
90

注意:如果这个键不存在就会输出 KeyError 错误

>>> name.get('zhangsan')
90

注意:如果这个键不存在,输出结果为空。

 

#删除指定指定的键值

>>> name.pop('zhangsan')
90
>>> name
{'lisi': 80, 'zhaoliu': 60, 'wangwu': 70}

#删除第一个键值

>>> name.popitem()
('lisi', 80)
>>> name
{'zhaoliu': 60, 'wangwu': 70}

#把其他字典的键值添加到本字典中

>>> name
{'zhaoliu': 60, 'wangwu': 70}
>>> name1={'jerry':88,'mike':66}
>>> name.update(name1)
>>> name
{'mike': 66, 'zhaoliu': 60, 'jerry': 88, 'wangwu': 70}

#拷贝为一个新的字典

>>> name2=name.copy()
>>> name2
{'mike': 66, 'zhaoliu': 60, 'jerry': 88, 'wangwu': 70}

注意:name2不会随着name变化

>>> name3=name
>>> name3
{'mike': 66, 'zhaoliu': 60, 'jerry': 88, 'wangwu': 70}

注意:name3会随着name进行变化

 

#判断字典中是否有这个键

>>> name.has_key('wangwu')
True
>>> name.has_key('fjc')
False

#如果字典中有这个键,就返回对应的值,没有则添加这个键到字典中,值默认为None

>>> name
{'mike': 66, 'zhaoliu': 60, 'jerry': 88, 'wangwu': 70}
>>> name.setdefault('mike')
66
>>> name.setdefault('mike',66)
66
>>> name.setdefault('mike',77)
66
>>> name
{'mike': 66, 'zhaoliu': 60, 'jerry': 88, 'wangwu': 70}
>>> name.setdefault('fjc')
>>> name
{'mike': 66, 'fjc': None, 'zhaoliu': 60, 'jerry': 88, 'wangwu': 70}
>>> name.setdefault('miss',50)
50
>>> name
{'mike': 66, 'fjc': None, 'zhaoliu': 60, 'miss': 50, 'jerry': 88, 'wangwu': 70}

注意:.setdefault()的括号中可以同时包含键和值。

 

#根据一个列表生成字典中的键,值都为None

>>> lst=[1,2,3,4,5]
>>> dic={}.fromkeys(lst)
>>> dic
{1: None, 2: None, 3: None, 4: None, 5: None}

#清空字典

>>> dic.clear()
>>> dic
{}

#字典迭代器

.iteritems()   # 获取所有键值

.iterkeys()    # 获取所有键

.itervalues() # 获取所有值

>>> a=name.iteritems()
>>> a.next()
('mike', 66)

注意:多次执行.next()可以一一列出键值

 

#一个键多个值

就是将值改成列表、元组或字典

>>> b={'a':[1,2,3],'b':2}
>>> c={'a':(1,2,3),'b':2}
>>> d={'a':{'c':3,'d':4},'b':2}