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

小咖啡111發表於2019-05-05

key是否存在


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


d = {

"name"

: 

"zhang"

, 

"age"

:

10

}

key = "gender"
if key in d:
pass

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

合併字典



>>> 

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 }

迭代字典


z = {

'b'

: 

2

, 

'c'

: 

4

, 

'a'

: 

1

}

>>> for key, value in z.items():
print(key, value)
b 2
c 4
a 1

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



>>> 


for

 key 

in

 z:

   print(key, z[key])
b 2
c 4
a 1

字典推導

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



>>> 

fruits = [

'apple'

, 

'mango'

, 

'banana'

,

'cherry'

]

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

字典排序

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



>>> 

d = {

"c"

: 

3

, 

"a"

: 

1

, 

"f"

:

6

, 

"b"

: 


}

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

預設值初始化字典

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



>>> 

chars = [

'a'

, 

'b'

,

'c'

,

'a'

,

'd'

,

'c'

]

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

可以使用 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(

lambda

: 

1

)

for c in chars:
dd[c] += 1

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

Python學習交流群:519489681  備註:小白愛踢


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31560357/viewspace-2643329/,如需轉載,請註明出處,否則將追究法律責任。

相關文章