Python学习(三)——字典、有序字典、集合

来源:互联网 发布:善用佳软 知乎 编辑:程序博客网 时间:2024/05/17 02:58

1、字典 dict

python中唯一的映射类型,用大括号{}界别;
字典提供名称与对象之间的映射;使用键-值(key-value)存储,具有极快的查找速度。类似于哈系表的键值对.
键值可以是任意不可改变对象,如字符串、数字、元组,也可以是一系列用逗号分开的值,如d[1,2,3]=’xyz’。
dict内部存放的顺序和key放入的顺序没有关系
支持的操作有:
x=d[k] 通过键进行索引
d[k]=x 通过键进行赋值
del d[k] 通过键删除一项
k in d 检测某个键是否存在
len(d) 字典中的项数

①索引

查询‘d’对应的数值:

>>> d={'a':56,'b':78,'c':46,'d':89}>>> d['c']46

②添加键值

把数据放入dict中,除了初始化还可以通过key放入:

>>> d={'a':56,'b':78,'c':46,'d':89}>>> d['a']=0>>> d{'a': 0, 'c': 46, 'b': 78, 'd': 89}>>> d['e']=12>>> d{'a': 0, 'c': 46, 'b': 78, 'e': 12, 'd': 89}

③删除键值

删除一个key,可以使用del d[x]或d.pop(‘x’):

>>> d={'a': 0, 'c': 46, 'b': 78, 'e': 12, 'd': 89}>>> del d['c']>>> d{'a': 0, 'b': 78, 'e': 12, 'd': 89}>>> d.pop('b')78>>> d{'a': 0, 'e': 12, 'd': 89}

④检测某个键是否存在

1)通过in判断key是否存在:

>>> d={'a':1,'b':2,'c':3}>>> 'a' in dTrue>>> 'e' in dFalse

2)通过get()方法判断:
若key存在则返回1,若不存在则返回None(此时交互式命令行不显示结果),或自己指定value;

>>> d={'a':1,'b':2,'c':3}>>> d.get('a')1>>> d.get('e')>>> d.get('e',0)0

⑤利用list()可获得字典关键字的列表:

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

利用items()与iteritems()将字典转换为列表

items()将字典中的所有项,以列表方式返回.

dic = {'a':3, 'b':1, 'c':2}l = dic.items()print l

输出:

[('a', 3), ('c', 2), ('b', 1)]

iteritems()返回一个迭代器.

import operatordic = {'a':3, 'b':1, 'c':2}d = dic.iteritems()print dprint type(d)print sorted(d, key=operator.itemgetter(1))

输出:

<dictionary-itemiterator object at 0x7f706a964578><type 'dictionary-itemiterator'>[('b', 1), ('c', 2), ('a', 3)]

利用dic统计list内的数据个数:

vote = {}data = [2,0,1,0,1,1,'a',1,2,2,'a']for i in data:    vote[i] = vote.get(i, 0) + 1print vote

输出:

{0: 2, 1: 4, 2: 3, 'a': 2}

2、有序字典

区别于字典内部存放的顺序和key放入的顺序没有关系,有序字典作为字典的子类,它的内部存放关系取决于和key放入的顺序.

对比如下:

有序字典:

import collectionsdic0 = collections.OrderedDict()dic0[45] ='four'dic0[37] ='three'dic0[62] ='two'dic0[13] ='one'dic0[20] ='zero'for key, value in dic0.items():    print key, value

输出:

45 four37 three62 two13 one20 zero

字典:

dic1 ={45:'four', 37:'three', 62:'two', 13:'one', 20:'zero'}for key, value in dic1.items():    print key, value

输出为:

20 zero13 one45 four62 two37 three

3、集合 set

集合用于包含一组无序的对象。集合中的元素不能重复,重复元素会被自动过滤。与dict相比set是一组key的集合但不存储value。

①创建set:

>>> s=set('ashkjh')>>> sset(['a', 'h', 's', 'j', 'k'])>>> s=set([1,2,3,4,5])>>> sset([1, 2, 3, 4, 5])>>> s=set('12345')>>> sset(['1', '3', '2', '5', '4'])

②添加元素:

可以使用add()添加一项或使用update()添加多项(可以添加重复项,但无效果):

>>> s=set([1,2,3])>>> sset([1, 2, 3])>>> s.add(4)>>> sset([1, 2, 3, 4])>>> s.update([7,8,9])>>> sset([1, 2, 3, 4, 7, 8, 9])

③删除元素:

通过remove(key)删除元素:

>>> s=set([1,2,3])>>> sset([1, 2, 3])>>> s.remove(3)>>> sset([1, 2])

④集合操作:

支持并集、交集、差集、对称差集
如,对集合s1、s2
B=s1 | s2 #并集
J=s1 & s2 #交集
C=s1 - s2 #差集(在s1中不在s2中的元素)
D=s1 ^ s2 #对称差集(在s1、s2中但不在二者的交集中的元素)

>>> s1=set(['1','2','x','y'])>>> s1set(['1', 'x', '2', 'y'])>>> s2=set(['x','y','z','w'])>>> s2set(['y', 'x', 'z', 'w'])>>> B=s1|s2>>> Bset(['1', '2', 'w', 'y', 'x', 'z'])>>> J=s1&s2>>> Jset(['y', 'x'])>>> C=s1-s2>>> Cset(['1', '2'])>>> D=s1^s2>>> Dset(['2', '1', 'z', 'w'])

这里写图片描述

原创粉丝点击