Python学习之路17——字典

这篇博客探讨了Python编程中的字典和集合。详细介绍了字典的操作和方法,特别是字典的键,以及集合的相关操作和方法,对于Python初学者来说是一份宝贵的参考资料。

字典

字典是Python语言中唯一的映射类型。映射类型对象里哈希值(键, key) 和指向的对象(值,value)是一一对应的。而且字典是可变的,它是一个容器类型,能存储任意个Python对象。

字典的创建,访问,更新和删除
>>> dict1 = {'a': 'value', 'b': 'value2'}
>>> dict1
{'a': 'value', 'b': 'value2'}
>>> fdict = dict((['x',1], ['y', 2]))
>>> fdict
{'y': 2, 'x': 1}
>>> 
>>> dict1 = {'a': 'have', 'b': 'fun'}
>>> for key in dict1.keys():
...     print 'key=%s, value=%s' % (key, dict1[key])
... 
key=a, value=have
key=b, value=fun
>>> dict1
{'a': 'have', 'b': 'fun'}
>>> dict1['newkey'] = 'new value'
>>> dict1
{'a': 'have', 'newkey': 'new value', 'b': 'fun'}
>>> 
>>> dict1
{'a': 'have', 'newkey': 'new value', 'b': 'fun'}
>>> del dict1['a']
>>> dict1
{'newkey': 'new value', 'b': 'fun'}
>>> del dict1
>>> dict1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'dict1' is not defined
>>> 

字典的操作和方法

比较大小
>>> dict1 = {'abc' : 123}
>>> dict2 = {'abc' : 456}
>>> dict3 = {'abc' : 123, 'edf' : 123}
>>> dict1 < dict3
True
>>> dict1 < dict2
True
>>> cmp(dict1, dict2)
-1
>>> cmp(dict2, dict1)
1
>>> cmp(dict1, dict1)
0
>>> 
判断该对象是否存在字典中
>>> dict1
{'abc': 123}
>>> 'no' in dict1
False
>>> 'abc' in dict1
True
>>> 'no' not in dict1
True
>>> 
创建字典的工厂函数dict()
>>> dict([['x', 1], ['y', 2]])
{'y': 2, 'x': 1}
>>> dict(x=1, y=2, z=3)
{'y': 2, 'x': 1, 'z': 3}
>>> 
老朋友len(),获取字典长度
>>> dict1 = {'a': 1, 'b': 2, 'c': 3}
>>> len(dict1)
3
>>> 
获取字典的键
>>> dict1 = {'a': 1, 'b': 2, 'c': 3}
>>> len(dict1)
3
>>> dict1.keys()
['a', 'c', 'b']
>>> 
更新合并字典update(),将一个字典的内容添加到一个字典中,字典中原有的键如果与新添加的键重复,则重复键对应的值更新。
>>> dict2 = {'host' : 'earth', 'port' : 80}
>>> dict3 = {'host' : 'venus', 'server': 'http'}
>>> dict2.update(dict3)
>>> dict2
{'host': 'venus', 'port': 80, 'server': 'http'}
>>> 
clear(), copy()
>>> dict2.clear()
>>> dict2
{}
>>> dict4 = dict3.copy()
>>> dict4
{'host': 'venus', 'server': 'http'}
>>> 

字典的键

第一:字典的值没有任何限制,可以是任意Python对象,但字典的键有一定的限制
第二:键值必须一一对应。一个键只能对应一个值,不然怎么查找。
第三:键必须是可hash的,可以用hash()来检测一个对象是不是哈希对象。如果是可哈希对象,则该函数会返回一个hash值,否则会抛出异常。
>>> hash('abc')
1453079729188098211
>>> hash([])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> hash({'a':1})
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'
>>> 
可以看出,字典,列表等可变类型的对象是不可哈希的。

集合

集合对象是一组无序排列的可哈希的值。同其他容器类型,集合支持in和not in操作符检查成员,可以由len()函数得到集合的长度,用for迭代集合的成员。但集合本身是无序的,它不支持切片操作。
集合分不可变集合(frozenset)和可变集合(set)。

还是老规矩,介绍集合的创建,访问,更新,删除操作(嘿嘿)
>>> s = set('chess')
>>> s
set(['h', 'c', 'e', 's'])
>>> fs = frozenset('cannot change')
>>> fs
frozenset(['a', ' ', 'c', 'e', 'g', 'h', 'o', 'n', 't'])
>>> 
>>> for k in s:
...     print k,
... 
h c e s
>>> 
>>> s.add('test')
>>> s
set(['test', 'h', 'c', 'e', 's'])
>>> s.update('python')
>>> s
set(['c', 'e', 'y', 'h', 'o', 'n', 'p', 's', 't', 'test'])
>>> s.remove('test')
>>> s
set(['c', 'e', 'y', 'h', 'o', 'n', 'p', 's', 't'])
>>> s -= set('pyton')
>>> s
set(['c', 'e', 'h', 's'])
>>> 
>>> del s
>>> s
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 's' is not defined
>>> 

集合的操作和方法

联合( | ),也称为并集
>>> s
set(['python', 'hello'])
>>> t
set(['C', 'hello'])
>>> s | t
set(['python', 'C', 'hello'])
>>> 

交集( & )
>>> s
set(['python', 'hello'])
>>> t
set(['C', 'hello'])
>>> s & t
set(['hello'])
>>> 

差集/相对补集( - )
>>> s
set(['python', 'hello'])
>>> t
set(['C', 'hello'])
>>> s - t
set(['python'])
>>> t - s
set(['C'])
>>> 

对称差分( ^ )
>>> s
set(['python', 'hello'])
>>> t
set(['C', 'hello'])
>>> s ^ t
set(['python', 'C'])
>>> 












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值