歡迎光臨
每天分享高質量文章

Python這10個字典操作你必須知道

導讀:Python字典是另一種可變容器模型,且可儲存任意型別物件,如字串、數字、元組等其他容器模型。本文是關於字典的一些操作,嗯,乾貨必須收藏……

 

作者:劉志軍

來源:Python之禪(ID:VTtalk)

 

01 key是否存在

 

使用 in 關鍵字判斷key是否存在字典中:

d = {"name""zhang""age":10}
key = "gender"
if key in d:
pass

不要使用 key in d.keys(), 這是一種畫蛇添足的操作,因為d.keys()會傳回一個新的串列物件,導致記憶體最大。

02 合併字典

 

>>> x = {'a'1'b'2}
>>> y = {'b'3'c'4}
>>> {**x, **y}
{'a'1'b'3'c'4}

傳回新的字典物件,x和y都不會改變,這是使用了PEP448範化解包操作, 如果 x 和 y 有相同的key, 那麼y會改寫x。如果使用字典的update 方法,將修改原來的物件,例如:

 

>>> y.update(x)
>>> y
{'b'2'c'4'a'1}

03 迭代字典

 

z = {'b'2'c'4'a'1}
>>> for key, value in z.items():
print(key, value)
b 241

也可以直接對字典z進行迭代,每次迭代傳回的是key,前面那種操作 z.items()會傳回一個新的物件。

>>> for key in z:
   print(key, z[key])
b 241

 

04 字典推導

 

使用字典推導式快速構建字典物件

>>> fruits = ['apple''mango''banana','cherry']
>>> {f:len(f) for f in fruits}
{'apple'5'mango'5'banana'6'cherry'6}

05 字典排序

 

字典本質上是個無序的容器物件(其實Python3.6開始支援有序,不過這個有序是指按照key的新增順序),如果我們要對字典的 key 或者 value 排序,一般是將其轉換為list,再按照key或者value排序。

>>> d = {"c"3"a"1"f":6"b"0}
# 按照value排序
>>> sorted(d.items(), key=operator.itemgetter(1))
[('b'0), ('a'1), ('c'3), ('f'6)]
# 按照key排序
>>> sorted(d.items(), key=operator.itemgetter(0))
[('a'1), ('b'0), ('c'3), ('f'6)]
>>>

 

06 預設值初始化字典

 

統計串列中每個字母出現的次數

>>> chars = ['a''b','c','a','d','c']
>>> data = {}
>>> for c in chars:
...     if c in data:
...         data[c]+=1
...     else:
...         data[c] = 0
...
>>> data
{'a'1'b'0'c'1'd'0}

可以使用 collections.defaultdict 透過工廠函式提供初始化預設值

chars = ['a''b','c','a','d','c']

dd = defaultdict(int)
for c in chars:
dd[c] += 1

>>>defaultdict(<class 'int'>, {'a': 2'b'1'c'2'd'1})

defaultdict 是 dict 的子類,繼承了 dict 的所有特性, 如果想要初始值為1 怎麼辦?可以用lambda函式來指定

dd = defaultdict(lambda1)
for c in chars:
dd[c] += 1

print(dd)
>>> defaultdict(lambda> at 0x01226B28>, {'a'3'b'2'c'3'd'2})

    已同步到看一看
    贊(0)

    分享創造快樂