字典(dict)
字典是一种映射型的数据类型,每个元素成对出现,即key- value,每对元素key 和 value“:”冒号分开,元素之间用逗号隔开,整个字典包括子在{}中。
字典中的“key”必须是不可变类型,“value”则可以是任意类型,如果出现一个“key”被多个“value”赋值,那么值为最后一个被赋的值,字典是可变数据类型,并且是无序的。所有不可变的数据类型都可以作为字典中的key,例如数字,字符串,元祖。字典的基本操作包括 创建,增加,删除,修改,查找,遍历,更新,in or not in 等。
常用方法:
1 get(k) 返回key所对应的value 2 setdefault(k, v) 如果ke有不存在,设置一个默认值v,并返回v 如果k存在,返回k所对应的value 3 keys() 获得所有keys 4 values() 获得所有values 5 iteritems() for i, j in d.iteritems():print(i,j) 6 update() m.update(n) m,n都是dict 7 pop(k) 删除k:v对应的元素 8 9 10 zip(l1, l2) 高阶函数,dict(zip(l1, l2)) 把l1和l2转换成 11 mm = dict(a=1,b=10,c=3,d=9) 12 print sorted(mm.iteritems(), key = lambda d:d[1], reverse = True) 13
示例:
1,创建
1 #用fromkeys创建一个字典 2 >>> dic = ["name","age","sex"] 3 >>> dict = dict.fromkeys(dic)#以序列dic中元素做字典的键,value为字典所有键对应的初始值 4 >>> dic 5 ['name', 'age', 'sex']#value对应值为None,不显示 6 >>> dict = dict.fromkeys(dic,"123")#设置默认值value为“123” 7 >>> dict 8 {'name': '123', 'age': '123', 'sex': '123'} 9 >>>
2,增加,删除,修改,查找
1 >>> info = {"name":"egon","age":18} 2 >>> info["sex"]="male"#直接添加 3 >>> info 4 {'name': 'egon', 'age': 18, 'sex': 'male'} 5 6 7 #这里的setdefault 如果key存在,返回已存在的值不修改,如不存在则创建,也可算作一种添加的方法吧 8 >>> info.setdefault("hobby","girls") 9 'girls' 10 >>> info 11 {'name': 'egon', 'age': 18, 'sex': 'male', 'hobby': 'girls'} 12 >>>info = {'name': 'egon', 'age': 18, 'sex': 'male', 'hobby': 'girls'} 13 >>> info.setdefault("age",20) 14 18 15 >>> info 16 {'name': 'egon', 'age': 18, 'sex': 'male', 'hobby': 'girls'} 17 >>> 18 19 20 21 #指定删除pop(),返回对应的值,并把这个值从字典中移除。 22 >>> info={'name': 'egon', 'age': 18, 'sex': 'male', 'hobby': 'girls'} 23 >>> info.pop("hobby") 24 'girls' 25 >>> info 26 {'name': 'egon', 'age': 18, 'sex': 'male'} 27 >>>>>> info.popitem()#删除任意键值对,因为字典是无序的。 28 ('sex', 'male') 29 >>> info 30 {'name': 'egon', 'age': 18} 31 >>> info.popitem() 32 ('age', 18) 33 >>> info 34 {'name': 'egon'} 35 >>> 36 37 38 39 #修改,直接修改 40 >>> info = {"name":"egon","age":18} 41 >>> info["age"]=20 42 >>> info 43 {'name': 'egon', 'age': 20} 44 >>> 45 46 47 48 #查找 49 >>> info={'name': 'egon', 'age': 20} 50 >>> "name"in info#成员运算符判断,返回布尔值 51 True 52 >>> info.get("name")#get查找字典中的key,key不存在返回默认值“None” 53 'egon' 54 >>> info["name"]#直接查找,根据“key” 55 'egon' 56 >>>
3,遍历(循环输出)
1 dic = {"name":"alex","age":18,"sex":"male"} 2 for key in dic.keys(): 3 print(key,end=" ") 4 # name age sex 5 for value in dic.values(): 6 print(value,end=" ") 7 # alex 18 male 8 for item in dic.items(): 9 print(item,end=" ") 10 #('name', 'alex') ('age', 18) ('sex', 'male')
1 >>> info = {"name":"egon","age":18,"sex":"male"} 2 >>> info.keys()#循环取key 3 dict_keys(['name', 'age', 'sex']) 4 >>> info.values()#循环取value 5 dict_values(['egon', 18, 'male']) 6 >>> info.items()#循环取键值对 7 dict_items([('name', 'egon'), ('age', 18), ('sex', 'male')]) 8 len(dict) #计算字典元素个数 9 str(dict) #输出字典可打印的字符串表示,数据类型会发生改变 10 dict.clear() # 清空词典所有条目 11 >>> info = {"name":"alex"}#将字典info中的键值更新到dic 12 >>> dic = {"age":18} 13 >>> info.update(dic) 14 >>> info 15 {'name': 'alex', 'age': 18} 16 >>>
python 帮助函数
dir():用来查询一个类或者对象所有属性。
help():用来查询的说明文档。
type():查看变量的类型
len():返回对象(字符、列表、元组等)长度或项目个数
isinstance() 判断实例是否是这个类或者object是变量。
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
示例:
1 >>> dir(list) 2 ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] 3 >>> help(list.pop) 4 Help on method_descriptor: 5 6 pop(...) 7 L.pop([index]) -> item -- remove and return item at index (default last). 8 Raises IndexError if list is empty or index is out of range. 9 10 >>> type(list) 11 <class 'type'> 12 >>> type(list.pop) 13 <class 'method_descriptor'> 14 >>>
1 >>>a = 2 2 >>> isinstance (a,int) 3 True 4 >>> isinstance (a,str) 5 False 6 >>> isinstance (a,(str,int,list)) # 是元组中的一个返回 True 7 True
1 >>>seasons = ['Spring', 'Summer', 'Fall', 'Winter'] 2 >>> list(enumerate(seasons)) 3 [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')] 4 >>> list(enumerate(seasons, start=1)) # 小标从 1 开始 5 [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')] 6 >>>seq = ['one', 'two', 'three'] 7 >>> for i, element in enumerate(seq): 8 ... print i, seq[i] 9 ... 10 0 one 11 1 two 12 2 three
强制类型转换函数:
str() int() list() dict() tuple()
列表构造函数:
- range()方法返回的是一个list对象,它需要开辟专门的空间保存序列中所有的元素。
- xrange() 方法返回的是xrange对象,它是一个序列对象,但并不保存序列中的元素。其实现方法与本文介绍的MyRange类型类似。
因此,如果只对序列进行读操作,xrange方法效率较高;但是如果需要改变序列的元素,或者需要往序列增删元素,那只能通过range方法生成一个list对象。要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一上来就开辟一块很大的内存空间。
1 >>> range(5) 2 [0, 1, 2, 3, 4] 3 >>> range(1,5) 4 [1, 2, 3, 4] 5 >>> range(0,6,2) 6 [0, 2, 4] 7 >>> xrange(5) 8 xrange(5) 9 >>> list(xrange(5)) 10 [0, 1, 2, 3, 4] 11 >>> xrange(1,5) 12 xrange(1, 5) 13 >>> list(xrange(1,5)) 14 [1, 2, 3, 4] 15 >>> xrange(0,6,2) 16 xrange(0, 6, 2) 17 >>> list(xrange(0,6,2)) 18 [0, 2, 4]
字典列表返回函数
items()用于 返回一个字典的拷贝列表,占额外的内存。
print dic.items() #[('a', 'hello'), ('c', 'you'), ('b', 'how')]
iteritems()用于返回本身字典列表操作后的迭代,不占用额外的内存。
print dic.iteritems() #<dictionary-itemiterator object at 0x020E9A50>
1 for i in dic.iteritems(): 2 3 print i 4 5 结果:('a', 'hello') 6 7 ('c', 'you') 8 9 ('b', 'how')