- Python算法設計與分析從入門到精通
- 明日科技編著
- 2730字
- 2022-07-28 18:54:33
3.4 字典與集合
字典是Python中的一種數據結構,它無序、可變,保存的內容以鍵-值對的形式存放。Python中的字典類似于我們日常生活中的新華字典,它把拼音和漢字關聯起來,通過音節表我們可以快速找到想要的漢字。其中,新華字典里的音節表相當于鍵(key),對應的漢字相當于值(value)。鍵是唯一的,值可以有多個。字典在定義一個包含多個命名字段的對象時很有用。
說明
Python中的字典相當于Java或者C++中的Map對象。
字典的主要特征如下:
通過鍵而不是通過索引來讀取。字典有時也稱為關聯數組或者散列表(hash),它通過鍵將一系列的值聯系起來,這樣就可以通過鍵從字典中獲取指定項,但不能通過索引來獲取。
字典是任意對象的無序集合。字典是無序的,各項是從左到右隨機排序的,即保存在字典中的項沒有特定的順序。這樣可以提高查找順序。
字典是可變的,且可以任意嵌套。字典可以在原處增長或者縮短(無須生成一份備份),且支持任意深度的嵌套(即其值可以是列表或其他字典)。
字典中的鍵必須唯一。不允許同一個鍵出現兩次,如果出現兩次,則后一個值會被記住。
字典中的鍵不可變。可以使用數字、字符串或者元組,但不能使用列表。
3.4.1 字典的定義
定義字典時,每個元素都必須包含兩部分—鍵和值。例如,一個保存水果信息的字典,鍵可以是水果名稱,值可以是水果價格,如圖3.45所示。

圖3.45 字典示意圖
創建字典時,在鍵和值之間使用冒號分隔,相鄰兩個元素使用逗號分隔,所有元素放在一對大括號“{}”中。語法格式如下:
dictionary = {'key1':'value1', 'key2':'value2', …, 'keyn':'valuen',}
參數說明:
dictionary:字典名稱。
key1,key2,…,keyn:元素的鍵。必須是唯一的,并且不可變。可以是字符串、數字或者元組。
value1,value2,…,valuen:元素的值。可以是任何數據類型,不要求唯一性。
例如,創建一個保存通訊錄信息的字典,可以使用下面的代碼:
dictionary = {'qq':'84978981','明日科技':'84978982','無語':'0431-84978981'} print(dictionary)
執行結果如下:
{'qq': '84978981', 'mr': '84978982', '無語': '0431-84978981'}
同列表和元組一樣,也可以創建空字典。在Python中,可以使用下面兩種方法創建空字典。
dictionary = {} dictionary = dict()
dict()方法除了可以創建一個空字典外,還可以通過已有數據快速創建字典,主要形式有以下3種。
1.通過映射函數創建字典
語法格式如下:
dictionary = dict(zip(list1,list2))
參數說明:
dictionary:字典名稱。
zip()函數:用于將多個列表或元組對應位置的元素重新“打包”,組合為新的元組,并返回包含這些內容的zip對象。如果想得到元組,可以將zip對象使用tuple()函數進行轉換;如果想得到列表,則可以使用list()函數進行轉換。
list1:一個列表,用于指定待生成字典的鍵。
list2:一個列表,用于指定待生成字典的值。如果list1和list2的長度不同,則與最短的列表長度相同。
2.通過給定的關鍵字參數創建字典
語法格式如下:
dictionary = dict(key1=value1,key2=value2,…,keyn=valuen)
參數說明:
dictionary:字典名稱。
key1,key2,…,keyn:表示參數名,必須是唯一的,并且符合Python標識符的命名規則。該參數將被轉換為字典的鍵。
value1,value2,…,valuen:表示參數值,可以是任何數據類型,不要求必須唯一。該參數將被轉換為字典的值。
例如,將名字和星座以關鍵字參數的形式創建一個字典,可以使用下面的代碼:
dictionary =dict(綺夢 = '水瓶座', 冷伊一 = '射手座', 香凝 = '雙魚座', 黛蘭 = '雙子座') print(dictionary)
執行結果如下:
{'綺夢': '水瓶座', '冷伊一': '射手座', '香凝': '雙魚座', '黛蘭': '雙子座'}
3.通過fromkeys()方法創建
還可以使用dict對象的fromkeys()方法創建值為空的字典,語法如下:
dictionary = dict.fromkeys(list1)
參數說明:
dictionary:字典名稱。
list1:作為字典的鍵的列表。
例如,創建一個只包括名字的字典,可以使用下面的代碼。

執行結果如下:
{'綺夢': None, '冷伊一': None, '香凝': None, '黛蘭': None}
另外,還可以通過已經存在的元組和列表創建字典。例如,創建一個保存名字的元組和保存星座的列表,通過它們創建一個字典,可以使用下面的代碼:

執行結果如下:
{('綺夢', '冷伊一', '香凝', '黛蘭'): ['水瓶座', '射手座', '雙魚座', '雙子座']}
如果將作為鍵的元組修改為列表,再創建一個字典,代碼如下:

執行結果如圖3.46所示。可見,錯誤出現在代碼的第3行,用列表作為字典的鍵值時產生了異常。

圖3.46 將列表作為字典的鍵時產生的異常
3.4.2 遍歷字典
字典是以鍵-值對的形式存儲數據的。Python提供了遍歷字典的方法,通過遍歷可以獲取字典中的全部鍵-值對。
使用字典對象的items()方法可以獲取字典的鍵-值對列表。其語法格式如下:
dictionary.items()
其中,dictionary為字典對象;返回值為可遍歷的(鍵-值對)的元組列表。
要想獲取到具體的鍵-值對,可以通過for循環遍歷該元組列表。例如,定義一個字典,通過items()方法獲取鍵-值對的元組列表,并輸出全部鍵-值對,代碼如下:

執行結果如下:
('qq', '84978981') ('明日科技', '84978982') ('無語', '0431-84978981')
上面的示例得到的是元組中的各個元素。如果想獲取到具體的鍵和值,可以使用下面的代碼進行遍歷:
01 dictionary = {'qq':'4006751066','明日科技':'0431-84978982','無語':'0431-84978981'} 02 for key,value in dictionary.items(): 03 print(key,"的聯系電話是",value)
執行結果如下:
qq 的聯系電話是 4006751066 明日科技 的聯系電話是 0431-84978982 無語 的聯系電話是 0431-84978981
說明
Python中,字典對象還提供了values()和keys()方法,用于返回字典的值和鍵列表。其使用方法同items()方法類似,需要通過for循環遍歷該字典列表,獲取對應的值和鍵。
3.4.3 集合簡介
Python提供了兩種創建集合的方法,一種是直接使用{ }創建;另一種是通過set()函數將列表、元組等可迭代對象轉換為集合。
1.使用賦值運算符直接創建集合
在Python中,創建set集合可以像創建列表、元組和字典一樣,通過直接將集合賦值給變量來實現。語法格式如下:
setname = {element 1,element 2,…,element n}
參數說明:
setname:集合名稱,可以是任何符合Python命名規則的標識符。
elemnet 1,elemnet 2,…,elemnet n:集合中的元素。個數沒有限制,只要是Python支持的數據類型就可以。
注意
創建集合時,使用的也是大括號“{}”。如果輸入了重復的元素,Python會自動只保留一個。
例如,下面的代碼將創建3個集合并打印輸出。
01 set1 = {'水瓶座','射手座','雙魚座','雙子座'} 02 set2 = {3,1,4,1,5,9,2,6} 03 set3 = {'Python', 28, ('人生苦短', '我用Python')} 04 print(set1) 05 print(set2) 06 print(set3)
執行結果如下:
{'水瓶座', '雙子座', '雙魚座', '射手座'} {1, 2, 3, 4, 5, 6, 9} {'Python', ('人生苦短', '我用Python'), 28}
說明
Python中的set集合是無序的,每次輸出時元素的排列順序可能都有所不同,不必在意。
2.使用set()函數創建集合
也可以使用set()函數將列表、元組等其他可迭代對象轉換為集合。set()函數的語法格式如下:
setname = set(iteration)
參數說明:
setname:集合名稱。
iteration:表示要轉換為集合的可迭代對象,可以是列表、元組、range對象等。另外,也可以是字符串,如果是字符串,返回的集合將是包含全部不重復字符的集合。
例如,下面的代碼將創建3個集合并打印輸出。
01 set1 = set("命運給予我們的不是失望之酒,而是機會之杯。") 02 set2 = set([1.414,1.732,3.14159,3.236]) 03 set3 = set(('人生苦短', '我用Python')) 04 print(set1) 05 print(set2) 06 print(set3)
執行結果如下:
{'不', '的', '望', '是', '給', ',', '我', '。', '酒', '會', '杯', '運', '們', '予', '而', '失', '機', '命', '之'} {1.414, 3.236, 3.14159, 1.732} {'人生苦短', '我用Python'}
可見,在創建集合時如果出現重復元素,將只保留一個。這里,第一個集合中的“是”和“之”都只保留了一個。
注意
在Python中,創建集合時推薦采用set()函數。另外,創建空集合只能使用set()函數,而不能使用大括號“{}”。這是因為Python中直接使用一對大括號“{}”表示創建一個空字典。
- Android Wearable Programming
- JavaScript前端開發模塊化教程
- Mastering Zabbix(Second Edition)
- Android應用程序開發與典型案例
- PHP 7底層設計與源碼實現
- Visual Basic程序設計教程
- JavaFX Essentials
- 編程珠璣(續)
- QGIS By Example
- 數據結構習題解析與實驗指導
- Android開發案例教程與項目實戰(在線實驗+在線自測)
- Hadoop大數據分析技術
- Exploring SE for Android
- Secret Recipes of the Python Ninja
- Learning Unreal Engine Game Development