1. 程式人生 > >python 核心編程(第二版)——映射和集合類型

python 核心編程(第二版)——映射和集合類型

包含 技術 cnblogs hide port div img 修改 有序

1.字典

字典是Python 語言中唯一的映射類型。映射類型對象裏哈希值(鍵) 和指向的對象(值)是一對多的關系。一個字典對象是可變的,它是一個容器類型,能存儲任意個數的Python 對象,其中也包括其他容器類型。字典類型和序列類型容器類(列表、元組)的區別是存儲和訪問數據的方式不同。序列類型只用數字類型的鍵(從序列的開始起按數值順序索引)。映射類型可以用其他對象類型做鍵;一般最常見的是用字符串做鍵(keys)。和序列類型的鍵不同,映射類型的鍵(keys)直接,或間接地和存儲的數據值相關聯。但因為在映射類型中,我們不再用"序列化排序"的鍵(keys),所以映射類型中的數據是無序排列的。

核心筆記

:什麽是哈希表?它們與字典的關系是什麽?

序列類型用有序的數字鍵做索引將數據以數組的形式存儲。一般,索引值與所存儲的數據毫無關系。還可以用另一種方式來存儲數據:基於某種相關值,比如說一個字符串。哈希表是一種數據結構:它按照我們所要求的去工作。哈希表中存儲的每一條數據,叫做一個值(value),是根據與它相關的一個被稱作為鍵(key)的數據項進行存儲的。鍵和值合在一起被稱為“鍵-值 對”(key-value pairs)。 哈希表的算法是獲取鍵,對鍵執行一個叫做哈希函數的操作,並根據計算的結果,選擇在數據結構的某個地址中來存儲你的值。任何一個值存儲的地址皆取決於它的鍵。正因為這種隨意性,哈希表中的值是沒有順序的。你擁有的是一個無序的數據集。

你所能獲得的有序集合只能是字典中的鍵的集合或者值的集合。方法Keys() 或 values() 返回一個列表,該列表是可排序的。 你還可以用 items()方法得到包含鍵、值對的元組的列表來排序。由於字典本身是哈希的,所以是無序的。哈希表一般有很好的性能, 因為用鍵查詢相當快。

一個字典條目的語法格式是 鍵:值。 而且,多條字典條目被包含在( { } ) 裏。創建字典只需要把字典賦值給一個變量,不管這個字典是否包含元素。

從Python 2.2 版本起, 可以用工廠方法 dict() 來創建字典;

從Python 2.3 版本起, 可以用一個很方便的內建方法fromkeys() 來創建一個"默認"字典, 字典中元素具有相同的值 (如果沒有給出, 默認為None)。如:ddict = {}.fromkeys((‘x‘, ‘y‘), -1);

要想遍歷一個字典(一般用鍵), 你只需要循環查看它的鍵,ex:for key in dict2.keys();從Python 2.2開始,可以用叠代器來訪問類序列對象,ex:for key in dict2(dict2為創建的字典);

要得到字典中某個元素的值, 可以用你所熟悉的字典鍵加上中括號來得到:ex dict2[‘name’];

檢查一個字典中是否有某個鍵的最好方法是in 或 not in 操作符。

可以通過以下幾種方式對一個字典做修改:

(1)添加一個新數據項或新元素(即,一個鍵-值對);

(2)修改一個已存在的數據項;

(3)或刪除一個已存在的數據項。

技術分享
1 >>> dict2[name] = venus # 更新已有條目
2 >>> dict2[port] = 6969 # 更新已有條目
3 >>> dict2[arch] = sunos5# 增加新條目
4 >>>
5 >>> print host %(name)s is running on port %(port)d %dict2
6 host venus is running on port 6969
View Code

上面的print 語句展示了另一種在字典中使用字符串格式符( %)的方法。用字典參數可以簡化print 語句,因為這樣做你只須用到一次該字典的名字,而不用在每個元素出現的時候都用元組參數表示。

python 核心編程(第二版)——映射和集合類型