您的位置:首页 > 编程语言 > Python开发

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

2017-07-27 18:42 645 查看

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 d
True
>>> 'e' in d
False


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 operator
dic = {'a':3, 'b':1, 'c':2}
d = dic.iteritems()
print d
print 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) + 1
print vote


输出:

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


2、有序字典

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

对比如下:

有序字典:

import collections
dic0 = 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 four
37 three
62 two
13 one
20 zero


字典:

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


输出为:

20 zero
13 one
45 four
62 two
37 three


3、集合 set

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

①创建set:

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


②添加元素:

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

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


③删除元素:

通过remove(key)删除元素:

>>> s=set([1,2,3])
>>> s
set([1, 2, 3])
>>> s.remove(3)
>>> s
set([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'])
>>> s1
set(['1', 'x', '2', 'y'])
>>> s2=set(['x','y','z','w'])
>>> s2
set(['y', 'x', 'z', 'w'])
>>> B=s1|s2
>>> B
set(['1', '2', 'w', 'y', 'x', 'z'])
>>> J=s1&s2
>>> J
set(['y', 'x'])
>>> C=s1-s2
>>> C
set(['1', '2'])
>>> D=s1^s2
>>> D
set(['2', '1', 'z', 'w'])


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: