03、数据类型(02)

字典(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             
View Code

 

示例:

  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 >>>
View Code

  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 >>>
View Code

  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')
View Code
 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 >>>
View Code

 

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 >>> 
View Code
1 >>>a = 2
2 >>> isinstance (a,int)
3 True
4 >>> isinstance (a,str)
5 False
6 >>> isinstance (a,(str,int,list))    # 是元组中的一个返回 True
7 True
View Code
 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
View Code

 

强制类型转换函数:

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]
View Code

 

字典列表返回函数

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')
View Code

 

 

posted @ 2018-04-01 23:25  有人喜欢蓝  阅读(176)  评论(0编辑  收藏  举报