1. 程式人生 > >python字典更新時出現value為None的情況

python字典更新時出現value為None的情況

字典在python中是非常重要的一種結構,因其用雜湊的方式儲存資料,其複雜度為O(1),速度非常快。

大多數的情況下,更改字典裡key對應的值,會使用重新賦值的方法

person = {'name': 'jack', 'age': 18}
print person
person['name'] = 'jhon' # 修改字典的值
print person

執行結果

{'age': 18, 'name': 'jack'}
{'age': 18, 'name': 'jhon'}

python內建的字典型別是無序的,所以輸出結果和原來的字典順序是不一樣的。

如果,key對應的值是一個物件或者資料結構,該怎麼去修改其對應的值呢,如:對應的值是一個列表

person = {'name': ['jack', 'alis'], 'age': 18}
print person
person['name'] = person['name'].append('hanjun') # 修改字典的值
print person

執行結果

{'age': 18, 'name': ['jack', 'alis']}
{'age': 18, 'name': None}

結果中name對應的值為None,這樣就出現了細節上的bug,並且這個bug是不容易被發現的,看起來好像沒什麼錯。

這種錯誤就說明對python的理解還不夠,本人就遇到了這個坑,而且花了好幾個小時的時間,悲哀呀。

正確的做法應該是:

person = {'name': ['jack', 'alis'], 'age': 18}
print person
person['name'].append('hanjun') # 修改字典的值
print person

執行結果

{'age': 18, 'name': ['jack', 'alis']}
{'age': 18, 'name': ['jack', 'alis', 'hanjun']}

對字典的值直接新增,而不是用再賦值的方式,再賦值的方式為什麼會錯呢?

因為,列表list的append是一個方法,該方法的返回值為None(沒有返回值就會返回None),所以key為name的值就為None了。