Python数据类型之字典
字典(dictionary)是除列表之外Python中最灵活的内置数据结构类型。
列表是有序对象的集合,字典是无序对象的集合。两者区别在于:字典当中的元素是通过键来存取的(键值对),而不是通过偏移存取。
字典用花括号"{}"标识。字典就是C++标准库的map,每一个元素都是成对的,包含key、value两部分。关键字key为不可变类型,如字符型、数字型、元组等,列表、字典等不可作为关键字,value可以是任意类型。
键是唯一的,并且字典只认最后一次赋的键值。
#字典的第一种定义方法 >>>dict = {} >>>dict["name"] = "jack" >>>dict["age"] = 18 >>>dict["sex"] = "male" #字典的第二种定义方法 >>>dictTest = {'name':'cindy','addr':'China','age':17} #输出完整的字典 >>>print dict {'age':18, 'name': 'jack', 'sex': 'male'}
#字典的遍历 >>> dict1 {'add': 'bj', 'tel': '18888888888', 'name': 'jack'} >>> for i,j in dict1.items(): ... print i,j #i代表字典的key,j代表字典的value ... add bj tel 18888888888 name jack >>> for i in dict1: ... print "%s : %s" %(i,dict1[i]) ... add : bj tel : 18888888888 name : jack #格式化输出 >>> for i,j in dict1.items(): ... print "%s : %s" %(i,j) ... add : bj tel : 18888888888 name : jack
#输出键为'name'的值 >>>print dict['name'] jack
#字典中值的修改 >>> dictTest['name'] = 'ruby' >>> dictTest {'age': 17, 'name': 'ruby', 'addr': 'China'}
#向字典中追加新元素 >>>> dictTest['school'] = 'bkd' >>> dictTest {'age': 17, 'school': 'bkd', 'name': 'ruby', 'addr': 'China'}
#删除字典中的元素 >>> dict1 {'age': 24, 'add': 'bj', 'tel': '18888888888', 'name': 'jack'} >>> del dict1['add'] >>> dict1 {'age': 24, 'tel': '18888888888', 'name': 'jack'}
字典(dict)的函数汇总:
#清空字典中所有的条目 >>>dict.clear() >>>dict {}
#输出所有的键,相当于先把key转成list,然后以list形式打印输出 >>>print dict.keys() ['age','name', 'sex']
#输出所有的值,相当于先把value转成list,然后以list形式打印输出 >>>print dict.values() [18,'jack', 'male']
#同dict[key],只是多了一个没有则返回缺省值0,缺省值可以自由定义。但dict[key]如果没有,就会报错。 >>>dict.get('sex',0) 'male' >>>dict.get('addr',0) 0
#键存在返回true,否则返回false >>>dict.has_key('name') True >>>dict.has_key('a') False
#返回字典中键的列表 >>>dict.keys() ['age','name', 'sex']
#返货字典中所有键值对的item >>>dict.items() [('age',18), ('name', 'jack'), ('sex', 'male')]
#合并两字典,合并时注意,dict中存在的会被覆盖,不存在的会增加。 >>>dict.update(dictTest) >>>dict {'addr':'China', 'name': 'cindy', 'age': 17, 'sex': 'male'}
#得到一个元素,并从字典中删除它。已空则抛出异常。 >>>dict.popitem() ('addr','China') >>>dict {'name':'cindy', 'age': 17, 'sex': 'male'}
#字典拷贝,但是dict和dict1所指的内存空间是不一样的。 >>>dict1 = dict.copy() >>>dict1 {'age':17, 'name': 'cindy', 'sex': 'male'} >>>dict {'name':'cindy', 'age': 17, 'sex': 'male'}
#查看字典在内存空间中存放的地址 >>>id(dict1) 39352480 >>>id(dict) 39320432
#字典复制,相当于给dict1指定了一个别名,它们是指向同一内存空间的,区别与字典的拷贝函数。 >>>dict12 = dict1 >>>id(dict12) 39352480
#dict.fromkeys(seq,val=None) 创建并返回一个新字典,以seq(序列)中的元素做该字典的键,val 做该字典中所有键对应的初始值(如果不提供此值,则默认为None) >>> dict3 = {} >>> dict3 = dict3.fromkeys(str1,0) >>> dict3 {'a': 0, 'c': 0, 'd': 0, 'f': 0, '3': 0, '1': 0, 's': 0, '2': 0}
#dict.setdefault(key,default=None) 如果字典中不存在key 键,由dict[key]=default 为它赋值。 >>> dict1 {'add': 'bj', 'tel': '15558162589', 'name': 'jack'} >>> dict1.setdefault(1,0) 0 >>> dict1 {1: 0, 'add': 'bj', 'tel': '15558162589', 'name': 'jack'}