Python中defaultdict()的使用

基本定義

(1)類似於C++的STL中的map,可以自定義字典的value類型,比如 dict = defaultdict(list),dict = defaultdict(int)

List類型

(1)自定義字典的value爲列表(list),當訪問一個key不存在時,將會爲這個key自動創建一個新的list,大小爲空

(2)當訪問一個存在的key時,將會返回那個已經存在的list,此時可以進行append()等操作

from collections import defaultdict

s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]

d = defaultdict(list) # 新建一個以list爲默認value的字典

for k, v in s: # 保存每個水果中的數字
    d[k].append(v)

sorted(d.items()) # 按照字典的key排序
print(d.items())

# [('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]

Int類型

(1)自定義字典的value爲整數(int),當訪問一個key不存在時,將會爲這個key自動創建一個新的int,值爲0

(2)當訪問一個存在的key時,將會返回那個已經存在的int,此時可以進行add等操作

s = 'mississippi' # 一個多個重複字符的字符串
d = defaultdict(int) # 新建一個以list爲默認value的字典

for k in s: # 保存每個字符出現的個數,注意這裏的每個字符初始個數爲0
    d[k] += 1

sorted(d.items()) # 按照字典的key排序
print(d.items())

# [('i', 4), ('m', 1), ('p', 2), ('s', 4)]

Set類型

(1)自定義字典的value爲集合(set),當訪問一個key不存在時,將會爲這個key自動創建一個新的set,大小爲空

(2)當訪問一個存在的key時,將會返回那個已經存在的set,此時可以進行add等操作

# set
s = [('red', 1), ('blue', 2), ('red', 3), ('blue', 4), ('red', 1), ('blue', 4)]

d = defaultdict(set) # 新建一個以set爲默認value的字典

for k, v in s: # set中只保存不重複的元素
    d[k].add(v)

sorted(d.items()) # 按照字典的key排序
print(d.items())

# [('blue', {2, 4}), ('red', {1, 3})]

全部示例


# list
from collections import defaultdict

s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]

d = defaultdict(list) # 新建一個以list爲默認value的字典

for k, v in s: # 保存每個水果中的數字
    d[k].append(v)

sorted(d.items()) # 按照字典的key排序
print(d.items())

# [('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]

# int
s = 'mississippi' # 一個多個重複字符的字符串
d = defaultdict(int) # 新建一個以list爲默認value的字典

for k in s: # 保存每個字符出現的個數,注意這裏的每個字符初始個數爲0
    d[k] += 1

sorted(d.items()) # 按照字典的key排序
print(d.items())

# [('i', 4), ('m', 1), ('p', 2), ('s', 4)]

# set
s = [('red', 1), ('blue', 2), ('red', 3), ('blue', 4), ('red', 1), ('blue', 4)]

d = defaultdict(set) # 新建一個以set爲默認value的字典

for k, v in s: # set中只保存不重複的元素
    d[k].add(v)

sorted(d.items()) # 按照字典的key排序
print(d.items())

# [('blue', {2, 4}), ('red', {1, 3})]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章