1. 程式人生 > 實用技巧 >python從0到1--8.字典與集合

python從0到1--8.字典與集合

1.字典

字典和列表類似,也是可變序列,不過與列表不同,它是無序的可變序列,儲存的內容是以“鍵值對”的形式存放的。

字典特徵主要如下:

  • 通過鍵而不是通過索引來讀取
  • 字典是任意物件的無序集合
  • 字典是可變的,並且可以任意巢狀
  • 字典中的鍵必須唯一
  • 字典中的鍵必須不可變

1.1字典的建立和刪除

定義字典時,每個元素都包含兩部分“鍵”和“值”;語法格式如下:

dictionary = {'key1':'value1','key2:value2'.....'keyn':'valuen'}

引數說明:

dictionary:表示字典名稱

key:表示元素的鍵,必須是唯一的,並且不可變。可以是字串,可以是數字或者元組

value:表示元素的值,可以是任何資料型別,不是必須唯一。

例如:

dictionary = {"石佛":"鄧肯","黑曼巴":"科比"}
print(dictionary)
print(dictionary["石佛"])

執行結果:

{'石佛': '鄧肯', '黑曼巴': '科比'}
鄧肯

同列表和元組一樣,在python中也可以建立空字典。使用下面兩種方式:

dictionary = {}

或者

dictionary = dict()

python 的dict()方法除了可以建立一個空字典外,還可以通過已有資料快速建立字典。主要表現形式為一下兩種:

a.通過對映函式建立字典,語法如下:

dictionary = dict(zip(list1,list2))

引數說明:

dictionary:表示字典名稱

zip()函式:用於價將多個列表或元組對應位置的元素組合為元組,並返回包含這些內容的zip物件。如果想得到元組,可以使用tuple函式將zip物件轉換為元組;如果想得到列表,則可以使用list函式將其轉換為列表。

list1:一個列表,用於指定要生成字典的鍵

list2:一個列表,用於指定要生成字典的值

返回值:如果list1和list2的長度不同,則與最短的列表長度相同。

例如:

name = ["鄧肯","吉諾比利","帕克","科比"]
sign = ["石佛","
妖刀","法國跑車"] dictionary = dict(zip(name,sign)) print(dictionary)

執行結果:

{'鄧肯': '石佛', '吉諾比利': '妖刀', '帕克': '法國跑車'}

b.通過給定的“關鍵字引數”建立字典,語法如下:

dictionary = dict(key1=value1,key2=value2........,keyn=valuen)

例如:

dictionary = dict(鄧肯 = "石佛",吉諾比利 = "妖刀")
print(dictionary)

另外,還可以通過已經存在的元組和列表建立字典。例如:

name_tuple = ("鄧肯","吉諾比利","帕克")     #作為鍵的元組,注意一個鍵
sign = ["石佛","妖刀","法國跑車"]           #作為值的列表,一個值
dict1 = {name_tuple:sign}                #建立字典
print(dict1)

執行結果:

{('鄧肯', '吉諾比利', '帕克'): ['石佛', '妖刀', '法國跑車']}
  • 刪除

同列表和元組一樣,不再需要的字典也可以視同del命令刪除整個字典。del dictionary

如果只是想刪除字典的全部元素,可以使用字典物件的clear()方法實現。執行clear方法後,原字典變為空字典。dictionary.clear()

還可以使用字典物件的pop()方法刪除並返回指定鍵的元素

1.2通過“健值對”訪問字典

  • 直接通過訪問字典的鍵輸出值
  • 假如不知道當前存在什麼鍵,所以需要避免該異常的產生。可以通過如下方式:
dictionary = {"鄧肯":"石佛","科比":"黑曼巴","梭羅":"小土豆"}
print("羅賓遜的綽號是:",dictionary['羅賓遜'] if "羅賓遜" in dictionary else '我的字典裡沒有此人')
  • 另外,python推薦的方法是用時字典物件的get()方法獲取指定的值。如:
dictionary = {"鄧肯":"石佛","科比":"黑曼巴","梭羅":"小土豆"}
print("科比的綽號是:",dictionary.get('科比'))

1.3遍歷字典

使用字典物件的items()方法可以獲取字典的“鍵值對”,其語法如下:

dictionary.items()

例如:

dictionary = {"鄧肯":"石佛","科比":"黑曼巴","梭羅":"小土豆"}
for item in dictionary.items():
    print(item)

執行結果:

('鄧肯', '石佛')
('科比', '黑曼巴')
('梭羅', '小土豆')

上面的例子的元組中的各個元素,如果想要獲取到具體的每個鍵和值,可以用下面的方式:

dictionary = {"鄧肯":"石佛","科比":"黑曼巴","梭羅":"小土豆"}
for key,value in dictionary.items():
    print(key,"的綽號是",value)

執行結果:

鄧肯 的綽號是 石佛
科比 的綽號是 黑曼巴
梭羅 的綽號是 小土豆

1.4 新增,修改和刪除字典元素

  • 新增
dictionary = dict((("鄧肯","石佛"),("科比","黑曼巴")))
dictionary['吉諾比利'] = "妖刀"
print(dictionary)
  • 修改
dictionary = dict((("鄧肯","石佛"),("科比","黑曼巴")))
dictionary['鄧肯'] = "妖刀"
print(dictionary)
  • 刪除
dictionary = dict((("鄧肯","石佛"),("科比","黑曼巴")))
dictionary['吉諾比利'] = "妖刀"
print(dictionary)
del dictionary["鄧肯"]
print(dictionary)

1.5字典推導式

表現形式和列表類似。例如

import random
randomdict = {i:random.randint(10,100) for i in range(1,5)}
print(randomdict)

2.集合

2.1 集合的建立

2.1.1直接使用“{}”建立

例如:

set1 = {'石佛','妖刀','跑車'}
print(set1)

2.1.2 使用set()函式建立

例如:

set1 = set("命運給予我們的不是失望之酒,而是機會之杯")
print(set1)

注意:每次執行結果都是不一樣的。這是因為set集合是無序的,所以每次輸出時元素排列順序可能是不同的

2.2集合新增和刪除

2.2.1向集合新增元素

使用add()方法實現。

例如:

mr = set (["零基礎學java","零基礎學c","零基礎學php"])
mr.add("零基礎學python")
print(mr)

2.2.2 從集合中刪除元素

mr = set (["零基礎學java","零基礎學c","零基礎學php","零基礎學python","零基礎學C#"])
mr.remove("零基礎學python")
print(mr)
mr.pop()
print(mr)
mr.clear()
print(mr)

2.3集合的交集/並集和差集運算

例如:

pf = set(["鄧肯","加內特","馬龍"])
print("大前鋒位置的球員有:",pf,'\n')
cf = set(["鄧肯","奧尼爾","姚明"])
print("中鋒位置的球員有:",cf,'\n')
print("交集運算",pf & cf)
print("並集運算",pf | cf)
print("差集運算",pf - cf)

3.列表/元組/字典/集合的區別

資料結構  是否可變 是否重複 是否有序 定義符號
列表 可變 可重複 有序 []
元組 不可變 可重複 有序 ()
字典 可變 可重複 無序 {key:value}
集合 可變 不可重複 無序 {}