Python学习笔记10

字典和集合:

 

Python的字典就是C语言中的哈希表,每一条数据有两个属性:key(键) 和 value(值)。 合在一起被称为key-value pairs(键值对)。值存储的位置取决于键的哈希值。字典是无序的集合。可以通过键直接访问值。Python中字典用{}(大括号)标识。例:dic={‘url’:’www.python.com’,’port’:’80’},每个键值对的键和值用:(冒号)分隔,键值对之间用,(逗号)分割。字典中的键必须是唯一并且可哈希的, 所以数字和字符串可以作为字典中的键, 但是列表和其他字典不行。一个实现了__hash__() 特殊方法的类是可哈希的。

 

访问字典:

>>> dict2 = {'name': 'earth','port': 80}

>>>

>>>> for key in dict2.keys():

... print 'key=%s, value=%s' % (key, dict2[key])

...

key=name, value=earth 

key=port, value=80

 

添加字典项:

dic={}

dic[‘1’]=’name’

dic[2]=age

删除字典:

del dic[‘key1’] 删除键值为key1的条目

dic.clear() 清空所有条目

del dic 删除字典

dic.pop(‘key1’) 删除并返回键值为key1的条目。

 

创建字典:

工厂函数dict(obj)obj为可迭代对象,对象的每个成员是由成对出现的元素构成。如:[(1,’a’),(2,’b’)] 或([1,’a’],[2,’b’])

 

字典内建函数:

 len(dicobj): 返回字典对象的长度,条目个数。

dicobj.copy():复制一个字典: d=dicobj.copy()

hash(obj):判断一个对象是否可哈希。

dict.cleara ()          删除字典中所有元素

dict.copya ()        返回字典(浅复制)的一个副本

dict.fromkeysc (seq,  val=None)       创建并返回一个新字典,以 seq 中的元素做该字典的键,val 做该字典中所有键对应的初始值(如果不提供此值,则默认为 None)

dict.get(key,default=None) 对字典dict 中的键key,返回它对应的值 value,如果字典中不存在此键,则返回 default 的值(注意,参数 default 的默认值为 None)

dict.has_key(key)  如果键(key)在字典中存在,返回 True,否则返回 False. 在 Python2.2版本引入 in 和 not in 后,此方法几乎已废弃不用了,但仍提供一个

可工作的接口。

dict.items()        返回一个包含字典中(键, 值)对元组的列表

dict.keys()         返回一个包含字典中键的列表

dict.iter(         方法 iteritems(), iterkeys(), itervalues()与它们对应的非迭代方法

一样,不同的是它们返回一个迭代子,而不是一个列表。

dict.popc (key [, default])   和方法 get()相似,如果字典中 key 键存在,删除并返回 dict[key],如果 key 键不存在,且没有给出 default 的值,引发 KeyError 异常。

dict.setdefault(key,default=None) 和方法set()相似,如果字典中不存在 key 键,由dict[key]=default 为它赋值。

dict.update(dict2)  将字典 dict2 的键-值对添加到字典 dict 

dict.values()       返回一个包含字典中所有值的列表

 

 

集合类型

集合对象是一组无序排列的可哈希的值。是的,集合成员可以做字典中的键。数学集合转为 Python 的集合对象很有效,集合关系测试和 union、intersection 等操作符在 Python 里也同样如我们所预想地那样工作。

 

集合操作

objin/not in set : 判断obj是否属于集合

set1== set2:  等于

set1!= set2: 不等于

set1 < set2:set1是set2的严格子集

 set1 <= set2: set1是set2的子集(包括非严格子集)

set1> set2: set1是set2的严格超集

set1>= set2: set1是set2的超集(包括非严格超集)

set1& set2: 交集

set1| set2: 并集

set1- set2: 差补或相对补集。两个集合(s 和t)的差补或相对补集是指一个集合 C,该集合中的元素,只属于集合 s,而不属于集合 t。

 

set1^set2:对称差分。两个集合(s 和t)的对称差分是指另外一个集合 C,该集合中的元素,只能是属于集合 s 或者集合t的成员,不能同时属于两个集合。

 

 

集合只能通过工厂函数来创建:set()可变集合。frozenset()不可变集合

s=set(‘abcde’)

s=frozenset(‘abcd’)

 

可变集合的操作:

添加:setobj.add(memberobj),每次添加一个成员

更新:setobj.update(obj)。 将obj转换为集合,然后添加到当前集合中。相当于setobj.update(set(obj))

删除:setobj.remove(memberobj) 每次删除一个成员。

另一种删除操作:setobj -= setobj1

 

删除集合对象:

delsetobj

 

集合类型方法

 

方法名称         操作

s.issubset(t)      如果 s 是 t 的子集,则返回 True,否则返回 False

s.issuperset(t)     如果 t 是 s 的超集,则返回 True,否则返回 False

s.union(t)          返回一个新集合,该集合是 s 和 t 的并集

s.intersection(t)  返回一个新集合,该集合是 s 和 t 的交集

s.difference(t)     返回一个新集合,该集合是 s 的成员,但不是 t 的成员

s.symmetric_difference(t)返回一个新集合,该集合是 s 或 t的成员,但不是 s 和 t共有的成员

s.copy()            返回一个新集合,它是集合 s 的浅复制

 

 

可变集合类型的方法

 

方法名                   操作

s.update(t)                 用 t 中的元素修改 s, 即,s 现在包含 s 或 t 的成员

s.intersection_update(t)  s 中的成员是共同属于 s 和 t 的元素。

s.difference_update(t)   s 中的成员是属于 s 但不包含在 t 中的元素

s.symmetric_difference_update(t)s 中的成员更新为那些包含在 s 或 t中,但不       是 s 和 t 共有的元素

s.add(obj)                  在集合 s 中添加对象 obj

s.remove(obj)  从集合 s 中删除对象 obj;如果 obj 不是集合 s 中的元素(obj not

ins),将引发KeyError 错误

s.discard(obj)              如果 obj 是集合 s 中的元素,从集合 s 中删除对象 obj;

s.pop()                   删除集合 s 中的任意一个对象,并返回它

s.clear()                  删除集合 s 中的所有元素

 

 

(Union)Update ( |= )

这个更新方法从已存在的集合中添加(可能多个)成员,此方法和 update()等价.

 

保留/交集更新( &= )

保留(或交集更新)操作保留与其他集合的共有成员。此方法和 intersection_update()等价.

 

差更新 ( –= )

对集合 s 和 t 进行差更新操作 s-=t,差更新操作会返回一个集合,该集合中的成员是集合 s 去除掉集合 t 中元素后剩余的元素。此方法和 difference_update()等价.

 

对称差分更新( ^= )

对集合 s 和 t 进行对称差分更新操作(s^=t),对称差分更新操作会返回一个集合,该集合中的成员仅是原集合 s 或仅是另一集合 t 中的成员。此方法和 symmetric_difference_update()等价.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值