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)

留言

熱門文章