以前在列表(list)中,可以根据列表的索引来获取该位置的元素对象。列表是一种有序序列,索引是数字。而字典(dict)类型则是无序的,可以根据键(key)来索引到值(value)。键不仅可以是数字,还可以是字符串。在每个字典对象中,每个键是独一无二,不会重复的。
>>> a = { "key1": "value1", "key2": "value2", "key3": "value3" } >>> a[ "key1" ] 'value1' >>> a[ "key2" ] 'value2' >>> a[ "key3" ] 'value3'
{ 键1:值1, 键2:值2, ... 键n:值n }
构建字典的方式:外侧用大括号{
和}
进行包围,每一组键值之间用英文输入法下的逗号,
进行隔开,而键与值之间使用英文输入法下的冒号:
进行隔开。举例如下:
>>> a = { 5: 20, "foo": "bar", "zhuan": 4 } >>> a[ 5 ] 20 >>> a[ "foo" ] 'bar' >>> a[ "zhuan" ] 4
有两种常用的方法来获取字典中某键(key)对应的值(value):
[]
的方式来获取,比如a[ "key1" ]
;a.get( "key1" )
如果该键在字典对象中是不存在的呢?结论:中括号的方式会报错;get方法会返回None或者预设的缺省值。这就是这两种方式的区别。
>>> a = { "k1": "v1", "k2": "v2", "k3": "v3" } >>> a[ "k4" ] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'k4' >>> print a.get( "k4" ) None >>> print a.get( "k4", "v4" ) v4
判断一个键是否存在有多种方式,如下所示使用in
的方式来判断:
>>> a = { "k1": "v1", "k2": "v2", "k3": "v3" } >>> "k1" in a True >>> "k4" in a False
另外一种判断方式,就是使用字典对象的内置函数has_key
进行判断:
>>> a = { "k1": "v1", "k2": "v2", "k3": "v3" } >>> a.has_key( "k1" ) True >>> a.has_key( "k4" ) False
只需某个值(value)赋给某个键(key)即可。若该键已经存在,则会更新此键对应的值;若该键不存在,则会添加这个键,并将此键对应到这个与之关联的值。
>>> a = { "k1": "v1" } >>> a[ "k1" ] = "zhuanfou" >>> print a {'k1': 'zhuanfou'} >>> a[ "k2" ] = 666 >>> print a {'k2': 666, 'k1': 'zhuanfou'}
如下所示,只使用大括号,即可定义一个空的字典。
>>> a = {} >>> a[ "风云" ] = "雄霸天下" >>> print a[ "风云" ] 雄霸天下
注意:
{}
是一个空字典;而不是空集合,set([])
才是空集合。
如下所示,使用del
即可删除字典中某对键值;但是被删除的这个键一定要是存在的,否则会出错的。
>>> a = { "k1": "v1", "k2": "v2", "k3": "v3" } >>> del a[ "k1" ] >>> a {'k3': 'v3', 'k2': 'v2'} >>> del a[ "zhuanfou" ] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'zhuanfou'
字典(dict)对象常用的内置函数如下表所示:
内置函数 | 说明 |
---|---|
clear |
清空字典 |
get |
返回指定键对应的值,若该键不存在,则返回None或已设置的缺省值 |
keys |
以列表的形式返回字典的所有键 |
items |
以列表的形式返回所有的键值,键值以元组(key,value)的形式存在 |
values |
以列表的形式返回字典的所有值 |
update |
用另一个字典的内容更新当前字典 |
clear函数:
>>> a = { "k1": "v1", "k2": "v2", "k3": "v3" } >>> a.clear() >>> a {}
keys函数:
>>> a = { "k1": "v1", "k2": "v2", "k3": "v3" } >>> a.keys() ['k3', 'k2', 'k1']
values函数:
>>> a = { "k1": "v1", "k2": "v2", "k3": "v3" } >>> a.values() ['v3', 'v2', 'v1']
items函数:
>>> a = { "k1": "v1", "k2": "v2", "k3": "v3" } >>> a.items() [('k3', 'v3'), ('k2', 'v2'), ('k1', 'v1')]
update函数:
>>> a = { "k1": "v1", "k2": "v2", "k3": "v3" } >>> a.update( { "k1": 666, "zhuan": "fou" } ) >>> a {'k3': 'v3', 'k2': 'v2', 'k1': 666, 'zhuan': 'fou'}
这里又延伸说一下使用for语句来循环遍历字典;另外注意一下,iteritems方法比items方法效率更高。习惯成自然,这些以后实践中遇到过几次就会记到骨子里去了。
可以使用循环来迭代遍历字典。最基础的方法就是for key in 字典对象
,该语句就会将字典中的键逐个赋值给循环变量key。(但是循环的顺序是不确定的,毕竟字典是无序的集合体嘛)
>>> a = { "k1": "v1", "k2": "v2", "k3": "v3" } >>> for key in a: ... print key, a[ key ] ... k3 v3 k2 v2 k1 v1
再说一种装叉一些的迭代方式,直接把值(value)也赋值给循环变量:
>>> a = { "k1": "v1", "k2": "v2", "k3": "v3" } >>> for key, value in a.items(): ... print key, value ... k3 v3 k2 v2 k1 v1
不过字典如果比较大的话,items方法会效率较低,此时可以用iteritems的方式来替代。(for循环中请习惯性使用iteritems的方法替代items吧,因为iteritems返回的是迭代器,items方法返回的是列表;如果数据过大,列表占用的内存会过大,而迭代器占用的内存是很小且相对固定的。)
>>> a = { "k1": "v1", "k2": "v2", "k3": "v3" } >>> for key, value in a.iteritems(): ... print key, value ... k3 v3 k2 v2 k1 v1
关于如何把python中的字典(dict)对象转换成JSON格式字符串,请阅读这里。