Python核心编程----映像和集合类型

本文深入探讨了Python中的映像类型,特别是字典,包括创建、访问和更新字典的方法。此外,还详细阐述了映射类型的操作符、内建函数和工厂函数。同时,介绍了集合类型,讲解了其创建、访问、更新和删除的操作,以及集合特有的操作符。内容涵盖了不可变和可变集合,并对比了操作符和内建方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

7.1 映射类型:字典

         映射类型对象里哈希值(键,key)和指向的对象(值,value)是一对多的关系。

7.1.1  创建字典和赋值

       
>>> dict1 = []

>>> dict1 = {}

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

>>> dict1, dict2
({}, {'name': 'earth', 'port': '80'})

>>> fdict = dict(['x', 1], ['y', 2])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: dict expected at most 1 arguments, got 2
dict expected at most 1 arguments, got 2

>>> fdict = dict((['x', 1], ['y', 2]))

>>> fdict
{'y': 2, 'x': 1}

python 2.2 起可以用工厂函数dict()来创建字典。从Python 2.3 起,可以用内建方法fromkeys() 来创建一个“默认”字典,字典中的元素具有相同的值(若没有给出,则为None):
>>> ddict = {}.fromkeys(('x', 'y'), 1)

>>> ddict
{'y': 1, 'x': 1}

>>> edict = {}.fromkeys(('a', 'b'))

>>> edict
{'a': None, 'b': None}


7.1.2 访问字典的值

      
>>> for key in dict2:
...     print 'key=%s, value=%s' % (key, dict2[key])
key=name, value=earth
key=port, value=80
>>> dict2['name']
'earth'

7.1.3 更新字典

          
>>> dict2['name'] = 'venus'

>>> dict2['port'] = '88'

>>> dict2['arch'] = 'sunos'

>>> dict2
{'arch': 'sunos', 'name': 'venus', 'port': '88'}
>>> print 'host %(name)s is running on port %(port)s' %dict2
host venus is running on port 88


7.2 映射类型操作符

7.2.1  标准类型操作符

7.2.2  映射类型操作符

1、字典的键查找操作符([])
2、成员关系操作(in, not in)

7.3 映射类型的内建函数和工厂函数

7.3.1  标准类型函数 type()   str()     cmp()

       字典的比较:首先是字典的大小,然后是键,最后是值。

7.3.2  映射类型相关的函数

      dict()  不提供参数,生成空字典。若参数是另一个字典,dict()则会从存在的字典里复制内容来生成新的字典。新生成的字典是原来的浅复制版本,但是速度比字典内建方法copy() 慢。
      len()
      hash()  判断某个对象是否可以作为字典的键。


7.4 映射类型的内建方法

       dict.clear()     dict clear()    dict.fromkeys(seq, val=None)    dict.get(key, default=None)    dict.has_key(key)     dict.items()    dict.keys()    dict.iter*()---{iteritems(), iterkeys(), itervalues()}     
       dict.pop(key, [,default])    dict.setdefault(key, default=None)    dict.update(dict2)     dict.values()

7.5 字典的键

7.5.1   不允许一个键对应多个值

当有键发生冲突,取最后的赋值。

7.5.2  键必须是可哈希的

所有的不可变对象都是可哈希的。值相等的数字表示相同的键,比如 1  和 1.0  的哈希值相同。


7.6 集合类型

集合对象是一组无序排列的可哈希的值。集合成员可以作为字典的键。

7.6.1  如何创建集合类型和给集合类型赋值

>>> s = set('cheeseshop')

>>> s
set(['c', 'e', 'h', 'o', 'p', 's'])

>>> t = frozenset('bookshop')

>>> t
frozenset(['b', 'h', 'k', 'o', 'p', 's'])

>>> len(s)
6

>>> len(s) == len(t)
True

7.6.2 访问集合的值

>>> 'k' in s
False

>>> 'k' in t
True

>>> for i in t:
...     print i
b
h
k
o
p
s

7.6.3 更新集合

>>> s.add('x')

>>> s
set(['c', 'e', 'h', 'o', 'p', 's', 'x'])

>>> s.update('update')

>>> s
set(['a', 'c', 'e', 'd', 'h', 'o', 'p', 's', 'u', 't', 'x'])

>>> s.remove('x')

>>> s
set(['a', 'c', 'e', 'd', 'h', 'o', 'p', 's', 'u', 't'])

>>> s -= set('update')

>>> s
set(['c', 'h', 'o', 's'])


7.6.4  删除集合中的成员和集合

>>> del s

>>> s
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 's' is not defined
name 's' is not defined

7.7  集合类型操作符

7.7.1 标准类型操作符

1、 in  , not in 
2、 == , !=
3、<, <= , > , >=

7.7.2  集合类型操作符

1、 联合 (|),有一个等价的方法 union()
>>> s | t
set(['c', 'b', 'e', 'h', 'k', 'o', 'p', 's'])

>>> s.union(t)
set(['c', 'b', 'e', 'h', 'k', 'o', 'p', 's'])

2、交集(&),有一个等价的方法, intersection()
>>> s & t
set(['h', 's', 'o', 'p'])

>>> s.intersection(t)
set(['h', 's', 'o', 'p'])

3、差补/相对补集(-)。 只属于s 而不属于 t  的集合
>>> s - t
set(['c', 'e'])

>>> s.difference(t)
set(['c', 'e'])
4、对称差分(^)。 这个集合中的元素只能属于s或者只能属于t。
>>> s ^ t
set(['b', 'e', 'k', 'c'])

>>> s.symmetric_difference(t)
set(['b', 'e', 'k', 'c'])

5、混合集合类型操作
s是可变集合,t是一个不可变集合,s在左边,产生的结果仍然是可变集合。但是反过来结果就不一样了。
>>> t | s
frozenset(['c', 'b', 'e', 'h', 'k', 'o', 'p', 's'])

>>> t ^ s
frozenset(['c', 'b', 'e', 'k'])

>>> t - s
frozenset(['k', 'b'])

7.7.3 集合类型操作符(仅适用于可变集合)

|=   添加成员,等价于 update()
&=  保留与其他集合的共有成员
-=   保留一个集合中除了另一个集合中的元素之后剩下的元素
^=   返回一个仅包含原来两个集合中其中一个集合的元素

7.8  内建函数

标准类型函数   len()
集合类型工厂函数   set()     frozenset()

操作符和内建方法的比较

      很多内建方法和操作符时几乎等价的。但是,当使用操作符时,操作符两边的操作数必须是集合。但是使用内建方法时,对象也可以是迭代类型的。









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值