[PYTHON] Dict 篇



< $Assign$ >
# 指定空 dict
d = {}
d = dict()
# 指定有內容的 dict
d = {'a': 1, 'b': 2}
# a -> 1, b -> 2
d = {chr(i): i for i in range(65, 91)} # ASCII 表
# A -> 65, B -> 66, C -> 67, ..., Z -> 90

< $Usage$ >
名詞:
  • $key$:關鍵字,欲存取對應值的關鍵字。$key$ 必須是 $hashable$(如:$list$ 不可當 $key$)。
  • $value$:值,關鍵字對應的值。$value$ 可為任意型態。
存取:
d = {}
d['a'] = 1 # a -> 1
print(d) # {'a': 1}
d['b'] = 2 # b -> 2
print(d) # {'a': 1, 'b': 2}
修改:
d = {}
d['a'] = 1 # a -> 1
print(d) # {'a': 1}
d['a'] = 2
print(d) # {'a': 2}
d['a'] += 1
print(d) # {'a': 3}
取值:
d = {'a': 1, 'b': 2}
print(d['a']) # 1
print(d['b']) # 2
print(d['c']) # KeyError: 'c'

< $Method$ >
  • $clear()$:從 $dict$ 刪除所有項目。
d = {'a': 1, 'b': 2}
d.clear()
print(d) # {}
  • $copy()$:回傳一個淺複製的 $dict$。
# 沒有使用 copy
d1 = {'a': 1, 'b': 2}
d2 = d1
d2['a'] = 10
print(d1) # {'a': 10, 'b': 2}
print(d2) # {'a': 10, 'b': 2}
# 使用 copy
d1 = {'a': 1, 'b': 2}
d2 = d1.copy()
d2['a'] = 10
print(d1) # {'a': 1, 'b': 2}
print(d2) # {'a': 10, 'b': 2}
  • $keys()$:回傳一個所有 $keys$ 的 $dict\_keys$(類似 $list$ )。
d = {'a': 1, 'b': 2}
print(d.keys()) # dict_keys(['a', 'b'])
  • $values()$:回傳一個所有 $values$ 的 $dict\_values$(類似 $list$)。
d = {'a': 1, 'b': 2}
print(d.values()) # dict_values([1, 2])
  • $get(key)$:則回傳 $key$ 在 $dict$ 裡面對應的 $value$。若 $key$ 不在 $dict$ 裡面,則會回傳 $None$。
d = {'a': 1, 'b': 2}
print(d.get('a')) # 1
print(d.get('c')) # None
  • $items()$:回傳一個所有 $keys$ 和 $values$(每組數據是 $tuple$ 型態) 的 $dict\_items$(類似 $list$)。
d = {'a': 1, 'b': 2}
print(d.items()) # dict_items([('a', 1), ('b', 2)])
  • $pop(key)$:則刪除該組 $key$ 和 $value$,並回傳 $value$。若 $key$ 不在 $dict$ 裡面,則會發生錯誤。
d = {'a': 1, 'b': 2}
print(d.pop('a')) # 1
print(d) # {'b': 2}
print(d.pop('c')) # KeyError: 'c'
  • $popitem()$:刪除並返回最後加入(也就是 $dict$ 的最後一項)的 $(key, \ value)$($tuple$ 型態)。若 $dict$ 沒有元素,則會發生錯誤。
d = {'a': 1, 'b': 2}
print(d.popitem()) # ('b', 2)
print(d) # {'a': 1}
print(d.popitem()) # ('a', 1)
print(d) # {}
print(d.popitem()) # KeyError: 'popitem(): dictionary is empty'

< $Function$ >
  • $len(dict)$:回傳 $dict$ 的長度。
d = {'a': 1, 'b': 2}
print(len(d)) # 2

< $Traversal$ >
  • 直接迭代,用 $key$、$dict[key] \ = \ value$ 方式呈現。
d = {'a': 1, 'b': 2}
for key in d: # d 相當於 d.keys()
    print('key:', key, 'value:', d[key])
'''
key: a value: 1
key: b value: 2
''' 
  • 用 $key, \ value$ 迭代 $dict\_items()$。
d = {'a': 1, 'b': 2}
for key, value in d.items():
    print('key:', key, 'value:', value)
'''
key: a value: 1
key: b value: 2
'''
  • 用 $zip()$ 把 $d.keys()$ 和 $d.values()$ 壓縮起來一起迭代。
d = {'a': 1, 'b': 2}
for key, value in zip(d.keys(), d.values()):
    print('key:', key, 'value:', value)
'''
key: a value: 1
key: b value: 2
'''



以上,
若有更好的想法歡迎提出哦!

留言

熱門文章