草根學Python(四) Dict 和 Set

前言

上一篇文章出現了個明顯的知識點錯誤,不過感謝有個網友的提出,及時進行了修改。也但願各位多多包涵。python

目錄

草根學Python(四) Dict 和 Set
草根學Python(四) Dict 和 Set

1、字典(Dictionary)

通過以前的學習,咱們能夠知道 list 和 tuple 能夠用來表示有序集合,以前咱們那個例子是用 list 來存儲了用戶的暱稱數組

user=['liangdianshui','twowater','兩點水']複製代碼

若是咱們須要把用戶的帳號也記錄進去呢?函數

用 list 能夠這樣子解決:性能

user=[['liangdianshui','111111'],['twowater','222222'],['兩點水','333333']]複製代碼

但是這樣表示也不方便,並且很難根據暱稱找到對應的暱稱,且 list 越長,耗時越長;這時候就能夠用 dict (字典)來表示了,Python 內置了 字典(dict),dict 全稱dictionary,至關於 JAVA 中的 map,使用鍵-值(key-value)存儲,具備極快的查找速度。學習

user={'liangdianshui':'111111' ,'twowater':'222222' ,'兩點水':'333333'}複製代碼

一、dict (字典)的建立

字典是另外一種可變容器模型,且可存儲任意類型對象。測試

字典的每一個鍵值(key=>value)對用冒號(:)分割,每一個對之間用逗號(,)分割,整個字典包括在花括號({})中 ,格式以下所示:ui

dict = {key1 : value1, key2 : value2 }複製代碼

注意:鍵必須是惟一的,但值則沒必要。值能夠取任何數據類型,但鍵必須是不可變的。spa

建立 dict(字典)實例:code

dict1={'liangdianshui':'111111' ,'twowater':'222222' ,'兩點水':'333333'}
dict2={'abc':1234,1234:'abc'}複製代碼

二、訪問 dict (字典)

#-*-coding:utf-8-*-
dict1={'liangdianshui':'111111' ,'twowater':'222222' ,'兩點水':'333333'}
print(dict1)複製代碼

輸出的結果:cdn

{'liangdianshui': '111111', 'twowater': '222222', '兩點水': '333333'}複製代碼

這裏須要注意的一點是:若是字典中沒有這個鍵,是會報錯的。

三、修改 dict (字典)

向字典添加新內容的方法是增長新的鍵/值對,修改或刪除已有鍵/值對

#-*-coding:utf-8-*-
dict1={'liangdianshui':'111111' ,'twowater':'222222' ,'兩點水':'333333'}
print(dict1)
# 新增一個鍵值對
dict1['jack']='444444'
print(dict1)
# 修改鍵值對
dict1['liangdianshui']='555555'
print(dict1)複製代碼

輸出的結果:

{'liangdianshui': '111111', 'twowater': '222222', '兩點水': '333333'}
{'liangdianshui': '111111', 'twowater': '222222', '兩點水': '333333', 'jack': '444444'}
{'liangdianshui': '555555', 'twowater': '222222', '兩點水': '333333', 'jack': '444444'}複製代碼

四、刪除 dict (字典)

經過 del 能夠刪除 dict (字典)中的某個元素,也能刪除 dict (字典)

經過調用 clear() 方法能夠清除字典中的全部元素

#-*-coding:utf-8-*-
dict1={'liangdianshui':'111111' ,'twowater':'222222' ,'兩點水':'333333'}
print(dict1)
# 經過 key 值,刪除對應的元素
del dict1['twowater']
print(dict1)
# 刪除字典中的全部元素
dict1.clear()
print(dict1)
# 刪除字典
del dict1複製代碼

輸出的結果:

{'liangdianshui': '111111', 'twowater': '222222', '兩點水': '333333'}
{'liangdianshui': '111111', '兩點水': '333333'}
{}複製代碼

五、 dict (字典)使用時注意的事項

(1) dict (字典)是不容許一個鍵建立兩次的,可是在建立 dict (字典)的時候若是出現了一個鍵值賦予了兩次,會以最後一次賦予的值爲準

例如:

#-*-coding:utf-8-*-
dict1={'liangdianshui':'111111' ,'twowater':'222222' ,'兩點水':'333333','twowater':'444444'}
print(dict1)
print(dict1['twowater'])複製代碼

輸出的結果:

{'liangdianshui': '111111', 'twowater': '444444', '兩點水': '333333'}
444444複製代碼

(2) dict (字典)鍵必須不可變,但是鍵能夠用數字,字符串或元組充當,可是就是不能使用列表

例如:

#-*-coding:utf-8-*-
dict1={'liangdianshui':'111111' ,123:'222222' ,(123,'tom'):'333333','twowater':'444444'}
print(dict1)複製代碼

輸出結果:

{'liangdianshui': '111111', 123: '222222', (123, 'tom'): '333333', 'twowater': '444444'}複製代碼

(3) dict 內部存放的順序和 key 放入的順序是沒有任何關係

和 list 比較,dict 有如下幾個特色:

  • 查找和插入的速度極快,不會隨着key的增長而變慢

  • 須要佔用大量的內存,內存浪費多

而list相反:

  • 查找和插入的時間隨着元素的增長而增長

  • 佔用空間小,浪費內存不多

六、dict (字典) 的函數和方法

方法和函數 描述
cmp(dict1, dict2) 比較兩個字典元素
len(dict) 計算字典元素個數
str(dict) 輸出字典可打印的字符串表示
type(variable) 返回輸入的變量類型,若是變量是字典就返回字典類型
dict.clear() 刪除字典內全部元素
dict.copy() 返回一個字典的淺複製
dict.values() 以列表返回字典中的全部值
popitem() 隨機返回並刪除字典中的一對鍵和值
dict.items() 以列表返回可遍歷的(鍵, 值) 元組數組

2、set

python 的 set 和其餘語言相似, 是一個無序不重複元素集, 基本功能包括關係測試和消除重複元素。set 和 dict 相似,可是 set 不存儲 value 值的。

一、set 的建立

建立一個 set,須要提供一個 list 做爲輸入集合

set1=set([123,456,789])
print(set1)複製代碼

輸出結果:

{456, 123, 789}複製代碼

傳入的參數 [123,456,789] 是一個 list,而顯示的 {456, 123, 789} 只是告訴你這個 set 內部有 456, 123, 789 這 3 個元素,顯示的順序跟你參數中的 list 裏的元素的順序是不一致的,這也說明了 set 是無序的。

還有一點,咱們觀察到輸出的結果是在大括號中的,通過以前的學習,能夠知道,tuple (元組) 使用小括號,list (列表) 使用方括號, dict (字典) 使用的是大括號,dict 也是無序的,只不過 dict 保存的是 key-value 鍵值對值,而 set 能夠理解爲只保存 key 值。

回憶一下,在 dict (字典) 中建立時,有重複的 key ,會被後面的 key-value 值覆蓋的,而 重複元素在 set 中自動被過濾的。

set1=set([123,456,789,123,123])
print(set1)複製代碼

輸出的結果:

{456, 123, 789}複製代碼

二、set 添加元素

經過 add(key) 方法能夠添加元素到 set 中,能夠重複添加,但不會有效果

set1=set([123,456,789])
print(set1)
set1.add(100)
print(set1)
set1.add(100)
print(set1)複製代碼

輸出結果:

{456, 123, 789}
{456, 123, 100, 789}
{456, 123, 100, 789}複製代碼

三、set 刪除元素

經過 remove(key) 方法能夠刪除 set 中的元素

set1=set([123,456,789])
print(set1)
set1.remove(456)
print(set1)複製代碼

輸出的結果:

{456, 123, 789}
{123, 789}複製代碼

四、set 的運用

由於 set 是一個無序不重複元素集,所以,兩個 set 能夠作數學意義上的 union(並集), intersection(交集), difference(差集) 等操做。

set集合運算
set集合運算

例子:

set1=set('hello')
set2=set(['p','y','y','h','o','n'])
print(set1)
print(set2)

# 交集 (求兩個 set 集合中相同的元素)
set3=set1 & set2
print('\n交集 set3:')
print(set3)
# 並集 (合併兩個 set 集合的元素並去除重複的值)
set4=set1 | set2
print('\n並集 set4:')
print(set4)
# 差集
set5=set1 - set2
set6=set2 - set1
print('\n差集 set5:')
print(set5)
print('\n差集 set6:')
print( set6)


# 去除海量列表裏重複元素,用 hash 來解決也行,只不過感受在性能上不是很高,用 set 解決仍是很不錯的
list1 = [111,222,333,444,111,222,333,444,555,666]  
set7=set(list1)
print('\n去除列表裏重複元素 set7:')
print(set7)複製代碼

運行的結果:

{'h', 'l', 'e', 'o'}
{'h', 'n', 'o', 'y', 'p'}

交集 set3:
{'h', 'o'}

並集 set4:
{'h', 'p', 'n', 'e', 'o', 'y', 'l'}

差集 set5:
{'l', 'e'}

差集 set6:
{'p', 'y', 'n'}

去除列表裏重複元素 set7:
{555, 333, 111, 666, 444, 222}複製代碼
相關文章
相關標籤/搜索