country_code =
my_dict.setdefault(key,
)
使用 collections.defaultdict
>>
>
import collections
>>
> index = collections.defaultdict(
list
)>>
> index[
'hunan'
]'changsha'
)>>
> index
defaultdict(
<
class
'list'
>
,)
自定義乙個dict子類,子類中實現__missing__
方法
dict[key] 會呼叫__getitem__
方法,如果沒有找到,就會觸發__missing__
方法
k in d 會呼叫__contains__
方法,如果
注意:要小心陷入無限迴圈呼叫
>>
>
>>
> d =
>>
>>
> d_proxy
)>>
> d_proxy[1]
='x'
traceback (most recent call last)
: file ""
, line 1,in
typeerror:
object does not support item assignment
set和frozenset直到 python2.3才首次出現,在python2.6中公升級為內建型別
>>
> l =
['spam'
,'spam'
,'eggs'
,'spam'
]>>
>
set(l)
>>
>
list
(set
(l))
['spam'
,'eggs'
]
found =
len(
set(needles)
&set
(haystack)
)
以上例子,在含有 10000000個元素中搜尋1000個值,大概只需要3毫秒左右。
在有1000萬個鍵的字典裡查詢1000個數,只需要 0.000337秒
使用集合的時間差不多
使用列表的速度最慢,需要100秒左右
1. 字典算得上是python的基石
2. python的特點是「簡單而正確」
3. 由於擁有緊湊的列表和字典表達,json格式可以完美地用於資料交換
《流暢的Python》讀書筆記
第1章 python資料模型 通過實現特殊方法,自定義資料型別可以表現得和內建型別一樣 repr 方便除錯和記錄日誌,str 方便使用者看 序列資料型別特殊方法使用最多 第2章 序列構成的陣列 系列型別可分為 可變和不可變 扁平序列和容器序列 列表推導生成器表示式提供了靈活構建和初始化序列的方式 元...
流暢的python讀書筆記
1.雖然也可以用列表推導來初始化元組 陣列或其他序列型別,但是生成器表示式是更好的選擇。這是因為生成器表示式背後遵守了迭代器協議,可以逐個地產出元素,而不是先建立乙個完整的列表,然後再把這個列表傳遞到某個建構函式裡。前面那種方式顯然能夠節省記憶體。生成器表示式的語法跟列表推導差不多,只不過把方括號換...
《流暢的python》讀書筆記(7)
增量賦值運算子 和 的表現取決於它們的第乙個操作物件 背後的特殊方法是iadd 用於 就地加法 但是如果乙個類沒有實現這個方法的話,python 會退一步呼叫 add 如果 a 實現了iadd方法,就會呼叫這個方法。同時對可變序列 例如list bytearray 和 array.array 來說,...