官术网_书友最值得收藏!

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中直接使用一對大括號“{}”表示創建一個空字典。

主站蜘蛛池模板: 丽水市| 衡东县| 罗田县| 肇东市| 瑞昌市| 定襄县| 安泽县| 奉节县| 富阳市| 台东县| 习水县| 济阳县| 山东| 平潭县| 陇南市| 丹阳市| 大关县| 闵行区| 长宁县| 长兴县| 茂名市| 五台县| 磐安县| 马龙县| 成武县| 华坪县| 麦盖提县| 合水县| 迁西县| 呼玛县| 响水县| 巴楚县| 娱乐| 永定县| 昌黎县| 上蔡县| 扶沟县| 茂名市| 无棣县| 六安市| 黄梅县|