# d.Python - 基本資料結構(Set)、字典(Dict)
###### tags: `Python`
## 1.集合(Set)
* <font color="#0080FF">**重複的資料會被自動刪除**</font>
```python=+
x = {1,2,1,2,1,2,1,2}
print(x)
```
>```{1, 2}```
##
* <font color="#0080FF">**邏輯運算**</font>
```python=+
x = {1,2,3,6}
y = set([1,7,8,9])
print(x | y) #聯集(OR)
print(x & y) #交集(AND)
print(x ^ y) #對稱差(XOR)
```
> ```{1, 2, 3, 6, 7, 8, 9}```</br>
> ```{1}```</br>
> ```{2, 3, 6, 7, 8, 9}```
## 2.集合常用方法(method)與操作
* <font color="#0080FF">**Set 無序的資料型態 - 不支援切片、索引及「順序相關」的「+」及「*」操作**</font>
```python=+
x = set([1,2,3,1,3,5])
print(x)
x.add(6) #新增元素
print(x)
x.remove(5) #刪除元素
print(x)
print(1 in x)
print(4 in x)
```
> ```{1, 2, 3, 5}```</br>
> ```{1, 2, 3, 5, 6}```</br>
> ```{1, 2, 3, 6}```</br>
> ```True```</br>
> ```False```
##
* <font color="#0080FF">**frozenset()**</font>
```python=+
x = set([1,2,3,1,3,5])
z = frozenset(x)
print(z)
z.add(6) #frozenset為不可變動型別,產生錯誤
x.add(z) #set裡面只可存放不可變動物件(如frozenset)
print(x)
```
> ```frozenset({1, 2, 3, 5})```</br>
> ```AttributeError: 'frozenset' object has no attribute 'add'```</br>
> ```{1, 2, 3, 5, frozenset({1, 2, 3, 5})}```
## 3.字典(Dict)
> <font color="#EA0000">**字典會自動依照索引排序 (如A-Z)**</font>
* <font color="#0080FF">**dict 和 set 的宣告**</font>
```python=+
x = {} #建立空字典
print(type(x))
x = {1} #要建立'set'一定要先有值
print(type(x))
```
> ```<class 'dict'>```</br>
> ```<class 'set'>```
##
* <font color="#0080FF">**del 來刪除字典中項目**</font>
```python=+
store = {'apple':25,'banana':30,'orange':40,'tomato':50}
del store['tomato']
store
```
> ```{'apple': 25, 'banana': 30, 'orange': 40}```
##
* <font color="#0080FF">**get() 和 setdefault()**</font>
```python=+
#<!>若找不到值,則回傳第二個參數設定(無第二參數則結束)
store.get('lemon','No translation')
store.setdefault('lemon','No translation') #若該key不存在,則新增key-value
store
store.setdefault('banana','No translation') #若該key已存在,則不變
store
```
> ```'No translation'```</br>
> ```{'apple': 25, 'banana': 30, 'lemon': 'No translation', 'orange': 40}```</br>
> ```{'apple': 25, 'banana': 30, 'lemon': 'No translation', 'orange': 40}```
##
* <font color="#0080FF">**copy() 取得字典的副本**</font>
```python=+
a = {0:'zero',1:'one'}
b = a.copy()
b
```
> ```{0: 'zero', 1: 'one'}```</br>
##
* <font color="#0080FF">**update() 兩個字典的合併**</font>
```python=+
up = {1:'ONE',2:'TWO'}
down = {0:'zero',1:"one"}
down.update(up)
down
```
> ```{0: 'zero', 1: 'ONE', 2: 'TWO'}```
##
* <font color="#0080FF">**<!>以字典作為快取**</font>
```python=+
sole_cache = {} #快取
def sole(m,n,t):
if(m,n,t) in sole_cache:
#如果字典裡已經有此鍵
return sole_cache[(m,n,t)]
else:
#否則...對(m,n,t)做一些計算
result = m * n * t
sole_cache[(m,n,t)] = result
return result
sole(5,5,5)
sole_cache
```
> ```125```</br>
> ```{(5, 5, 5): 125}```
## 時間戳記
> [name=ZEOxO][time=Mon, Aug 24, 2020 15:46 PM][color=#907bf7]