python序列类型唯一的映射类型_python2.x学习笔记(8)-映射和集合类型
1. 字典是 Python 語言中唯一的映射類型。映射類型對象里哈希值(鍵) 和指向的對象(值)是一對一的關系.
2. 一個字典對象是可變的,它是一個容器類型,能存儲任意個數的 Python 對象,其中也包括其他容器類型。字典類型和序列類型容器類(列表、元組)的區別是存儲和訪問數據的方式不同。
3. 你所能獲得的有序集合只能是字典中的鍵的集合或者值的集合。
方法 Keys() 或 values() 返回一個列表,該列表是可排序的。
你還可以用 items()方法得到包含鍵、值對的元組的列表來排序。
由于字典本身是哈希的,所以是無序的。
4. 創建字典和給字典賦值
>>> dict1 = {}
>>> dict2 = {'name': 'earth', 'port': 80}
>>> dict1, dict2
({}, {'port': 80, 'name': 'earth'})
>> fdict = dict((['x', 1], ['y', 2]))
>>> fdict
{'y': 2, 'x': 1}
>>> fdict = dict((['x', 1], ['y', 2]))
>>> fdict
{'y': 2, 'x': 1}
>>> ddict = {}.fromkeys(('x', 'y'), -1)
>>> ddict
{'y': -1, 'x': -1}
5. 如何訪問字典中的值
>>> dict2 = {'name': 'earth', 'port': 80}
>>>> for key in dict2.keys():
... print 'key=%s, value=%s' % (key, dict2[key])
從 Python 2.2 開始, 你可以不必再用 keys()方法獲取供循環使用的鍵值列表了。 可以
用迭代器來輕松地訪問類序列對象(sequence-like objects),比如字典和文件。
>>> for key in dict2:
... print 'key=%s, value=%s' % (key, dict2[key])
6. 如果我們想訪問該字典中的一個數據元素,而它在這個字典中沒有對應的鍵,
將會產生一個KeyError錯誤:
檢查一個字典中是否有某個鍵的最好方法是用字典的 has_key()方法, 或者另一
種比較好的方法就是從 2.2 版本起用的,in 或 not in 操作符。 has_key() 方法將會在未來的Python 版本中棄用,所以用 in 或 not in 是最好的方法。
>>> 'server' in dict2 # 或 dict2.has_key('server')
False
7. 字典中的鍵必須是可哈希的, 所以數字和字符串可以作為字典中的鍵, 但是列表和其他字典不行。
>>> print 'host %(name)s is running on port %(port)d' %dict2
host venus is running on port 6969
8. 避免使用內建對象名字作為變量的標識符
請不要用 dict, list,file, bool, str, input, len 這樣的內建類型為變量命名.
9. 內建函數 hash()本身并不是為字典設計的方法,但它可以判斷某個對象是否可以做一個字典的鍵。將一個對象作為參數傳遞給 hash(), 會返回這個對象的哈希值。 只有這個對象是可哈希的,才可作為字典的鍵 (函數的返回值是整數,不產生錯誤或異常)。
如果用比較操作符來比較兩個數值,發現它們是相等的,那么即使二者的數據類型不同, 它
們也會得到相同的哈希值。
如果非可哈希類型作為參數傳遞給 hash()方法,會產生 TypeError 錯誤(因此,如果使用這樣的對象作為鍵給字典賦值時會出錯):
>>> hash([])
Traceback (innermost last): File "", line 1, in ?
TypeError: list objects are unhashable
10. 字典類型方法
dict.clear () 刪除字典中所有元素
dict.copy () 返回字典(淺復制)的一個副本
dict.fromkeys (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() 返回一個包含字典中所有值的列表
11. 所有不可變的類型都是可哈希的,因此它們都可以做為字典的鍵。
一個要說明的是問題是數字:值相等的數字表示相同的鍵。換句話來說,整型數字 1 和 浮點數 1.0 的哈希值是相同的,即它們是相同的鍵。
12. 數學上, 把 set 稱做由不同的元素組成的集合,集合(set)的成員通常被稱做集合元素(setelements)。Python 把這個概念引入到它的集合類型對象里。集合對象是一組無序排列的可哈希的值.
13. 和其他容器類型一樣,集合支持用 in 和 not in 操作符檢查成員, 由 len() 內建函數得到集合的基數(大小), 用 for 循環迭代集合的成員。但是因為集合本身是無序的,你不可以為集合創建索引或執行切片(slice)操作,也沒有鍵(keys)可用來獲取集合中元素的值。集合(sets)有兩種不同的類型,可變集合(set) 和 不可變集合(frozenset)。
14. 集合被創建的唯一方法 - 用集合的工廠方法 set()和 frozenset():
>>> s = set('cheeseshop')
>>> s
set(['c', 'e', 'h', 'o', 'p', 's'])
>>> t = frozenset('bookshop')
>>> t
frozenset(['b', 'h', 'k', 'o', 'p', 's'])
>>> s.add('z')
>>> s.update('pypi')
>>> s.remove('z')
>>> s -= set('pypi')
>>> s | t
>>> s & t
>>> s - t
>>> s ^ t
分享到:
2010-03-11 20:38
瀏覽 1640
評論
總結
以上是生活随笔為你收集整理的python序列类型唯一的映射类型_python2.x学习笔记(8)-映射和集合类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python下载大文件mp4_Pytho
- 下一篇: 电脑计算机怎么修复工具栏 电脑工具栏修复