字典的劇本

一、鍵的存在性(The 「Are You There?」)程序員

不推薦的:app

dct.has_key(key)

Python的作法:測試

key in dct

二、Yoda 測試(The 「Yoda Test」)code

對於那些精通 「Are Your There」 的程序員,還有一個簡單的一樣也很惱人的行爲,不單單對於dict而言,它很廣泛對象

若是你非要Notget

not key in dct

English,你會說麼?:it

key not in dct

三、不管如何都要取到值(The 「Get The Value Anyway」)io

這個是至關流行。你有一個dict和key,而且你想修改key對應的值,好比給它自增1(假如你在數數)。import

比較遜一點的作法::程序

if key not in dct:
    dct[key] = 0
dct[key] = dct[key] + 1

漂亮的作法:

dct[key] = dct.get(key, 0) + 1

四、讓它發生!(The 「Make it Happen」)

有時你的字典裏都是常常修改的對象,你須要初始化一些數據到這個字典,也須要修改其中的一些值。好比說,你在維護一個這樣的dict:它的值都是鏈表。

寫一個實現就是:

dct = {}
for (key, value) in data:
    if key in dct:
        dct[key].append(value)
    else:
        dct[key] = [value]

更Pythonic的作法是:

dct = {}
for (key, value) in data:
    group = dct.setdefault(key, []) # key might exist already
    group.append(value)

setdefault(key, default) 所作的是:若是存在,返回 dct[key] , 不存在則把 dct[key] 設爲 default 並返回它。當一個默認的值是一個你能夠修改的對象的時候這是頗有用的。

使用 defaultdict

from collections import defaultdict
dct = defaultdict(list)
for (key, value) in data:
    dct[key].append(value)

defaultdict 很是棒, 它每生成一對新的 key-value ,就會給value一個默認值, 這個默認值就是 defaultdict 的參數。(注:defaultdict在模塊 collections 中)

相關文章
相關標籤/搜索