2.資料型態:dict與set#

群集資料型別:dict#

dict是dictionary的略稱,字典這種資料型態的組成是一群成對的key與value。

key在字典裡不能重複,通常會使用字串或tuple來當作key。至於value則沒有什麼限制。

dict跟後面等等會介紹的set一樣,都是沒有順序的,不能使用切片。

建立dict

以下兩種方法都可以建立dictionary。

# key: value
a_dict = {'a': 1, 'b': 2, 'c':3}

# key=value
a_dict = dict(a=1, b=2, c=3)

dict的基本用法#

dict的基本用法

利用key來取出value:

a_dict['a']
1

利用key來取出value的另一種方法:

a_dict.get('a')
1

若key值不存在的話,用這個方法python會丟出錯誤。

a_dict['d']
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
Cell In[4], line 1
----> 1 a_dict['d']

KeyError: 'd'

若key值不存在的話,用.get()方法python不會丟出錯誤。

a_dict.get('d') # 不會回傳任何東西

.get()方法內的參數是當key值不存在時,預設的value。

a_dict.get('d', 'missing')
'missing'

dict 新增與刪除項目#

dict新增項目

新增項目的方法有兩種:

a_dict = {'a': 1, 'b': 2, 'c':3}

# 第一種
a_dict['d'] = 4
print(a_dict)

# 第二種
a_dict.update({'e': 5})
print(a_dict)
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}

dict刪除項目

a_dict = {'a': 1, 'b': 2, 'c':3}

方法1

a_dict.pop('a')
1
print(a_dict)
{'b': 2, 'c': 3}

key值若不存在會拋錯。

a_dict.pop('d')
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
Cell In[11], line 1
----> 1 a_dict.pop('d')

KeyError: 'd'

.pop()方法中可以塞預設值。

a_dict.pop('d', 'Nothing happened')
'Nothing happened'
print(a_dict)
{'b': 2, 'c': 3}

方法2

del a_dict['b']

print(a_dict)
{'c': 3}

dict中的key值不能重複

當要新增項目時,dict中對應的key值若已經存在,會以新的為準。

a_dict = {'a': 1, 'b': 2, 'c':3}
b_dict = {'b': 'ni', 'c': 'san', 'd': 'shi'}

a_dict.update(b_dict)
print(a_dict)
{'a': 1, 'b': 'ni', 'c': 'san', 'd': 'shi'}

dict 操作#

取得dict的內容

a_dict = {'a': 1, 'b': 2, 'c':3}
# 取得key的list
list(a_dict.keys())
['a', 'b', 'c']
# 取得value的list
list(a_dict.values())
[1, 2, 3]
# 取得key跟value的list,注意到其中是一個一個tuple
list(a_dict.items())
[('a', 1), ('b', 2), ('c', 3)]

取得dict長度

a_dict = {'a': 1, 'b': 2, 'c':3}

# 長度指的是key的數量
len(a_dict)
3

檢查key是否存在

a_dict = {'a': 1, 'b': 2, 'c':3}

'c' in a_dict
True

用{**a, **b}結合dict

dict_1 = {'a': 'apple', 'b': 'beach', 'c': 'cat'}
dict_2 = {'d': 'dog', 'e': 'egg', 'f': 'flower'}

dict_all = {**dict_1, **dict_2}
print(dict_all)
{'a': 'apple', 'b': 'beach', 'c': 'cat', 'd': 'dog', 'e': 'egg', 'f': 'flower'}

群集資料型別:set#

set是具有不重複元素的一種資料型別。

操作跟數學上的集合很像。

set沒有順序的概念,因此不支援切片。

建立set

a = {1,2,3}
a = set([1,2,3])

set元素操作#

加入元素至set

a = {1,2,3}
a.add(4)
print(a)
{1, 2, 3, 4}

.add()已經存在的元素不會改變set。

a.add(1)
print(a)
{1, 2, 3, 4}

刪除set中的元素

a = {1,2,3}
a.remove(1)

print(a)
{2, 3}

set 操作#

取得set的長度

a = {1,2,3}

len(a)
3

set的運算

a = {1,2,3}
b = {3,4,5}
c = {1,2,3,4,5}

交集

a & b
{3}
a.intersection(b)
{3}

聯集

a | b
{1, 2, 3, 4, 5}
a.union(b)
{1, 2, 3, 4, 5}

差集

取差集的順序會有影響。

a - b
{1, 2}
a.difference(b)
{1, 2}
b - a
{4, 5}
b.difference(a)
{4, 5}

取互斥的元素

a ^ b
{1, 2, 4, 5}
a.symmetric_difference(b)
{1, 2, 4, 5}

判斷是否為子集合

a <= b
False
a.issubset(b)
False

判斷是否為真子集

a < b
False

判斷是否為超集合

a >= b
False
a.issuperset(b)
False

判斷是否為真超集

a > b
False