Python Cookbook (1-3) 字典
1. 字典:
字典是一種鍵值對的資料格式,查找的速度比 list 快,搭配一些字典的模組會讓字典使用起來更方便。
2. defaultdict:
from collections import defaultdict ddct = defaultdict(list)
產生一個 defaultdict 的物件,若查詢不中會呼叫 list 這個函式。
ddct["a"] print(ddct) # defaultdict(<class 'list'>, {'a': []})
我們不用像一般的字典一樣使用前要先去確認是否有該鍵的存在。
使用 defaultdict。
ddct["b"].append(3)
使用一般字典。
if "b" in normal_dct.keys(): do_something else: do_something
3. OrderedDict
from collections import OrderedDict od = OrderedDict() od["a"] = "alice" od["b"] = "bob" od["c"] = "cat" for key in od.keys(): print(key) # a b c
OrderedDict.keys() 的 key 會照存放的順序被 iterate。
4. 對字典找極值或排序:
用 min max找極值。
age = {"alice": 10,"bob": 30 , "cooper": 27} max(zip(age.values(), age.keys())) min(zip(age.values(), age.keys()))
zip 會產生帶有 .__next__() 的物件,呼叫 .__next__() 會回傳一個壓製的 tuple。
對字典排序。
# 對 key 排序 res = sorted(zip(age.keys(), age.values()), key=lambda tup: tup[0]) # 對 value 排序 res = sorted(zip(age.keys(), age.values()), key=lambda tup: tup[1])
5. 比較兩字典:
a = {"a": 1, "b": 2, "c": 3} b = {"e": 1, "b": 2, "f": 3} # 鍵的交集和差集 a.keys() & b.keys() a.keys() - b.keys() # 鍵值的交集和差集 a.items() & b.items() a.items() - b.items()
6. 連續查找兩字典:
a = {"x":1, "z":3} b = {"y":2, "z":4} from collections import ChainMap c = ChainMap(a, b) c["x"] c["y"] c["z"]
ChainMap(a, b) 會先查找 a 再查找 b。
Reference
[1] David Beazley, Brian K. Jones, Python Cookbook, 3e , O'Reilly Media (2014)
留言
張貼留言