python collection庫的使用

補充知識,各種表達式的效果:
tasks = [
1,
2,
3
]

a = (i for i in tasks) #這種情況生成的是生產器,可以用來迭代
b = [i for i in tasks] #生成的是列表
c = {i for i in tasks} #這種情況下生成的是set (很意外吧)
d = {i:1 for i in tasks} #這種情況下生成的是字典

print(type(a))
print(type(b))
print(type©)
print(type(d))

運行結果:
<class ‘generator’>
<class ‘list’>
<class ‘set’>
<class ‘dict’>

其實在我們的工作開發過程中是有很多的時候出現字典列表,或者字典多層嵌套,而此時我們就是在遍歷,代碼寫的冗長,而現在其實我們是有別的辦法的。
ChainMap
ChainMap主要是將多個字典組合在一起,然後進行操作

In [6]: a = {“x”:1, “z”:3}
In [7]: b = {“y”:2, “z”:4}
In [8]: c = ChainMap(a, b)
In [9]: c
Out[9]: ChainMap({‘z’: 3, ‘x’: 1}, {‘z’: 4, ‘y’: 2})

n [10]: c[“z”]
Out[10]: 3
In [11]: c[“z”] = 4
#只會讀寫第一個字典裏面的值

In [12]: c
Out[12]: ChainMap({‘z’: 4, ‘x’: 1}, {‘z’: 4, ‘y’: 2})

In [13]: c.pop(‘z’)
Out[13]: 4
In [14]: c
Out[14]: ChainMap({‘x’: 1}, {‘z’: 4, ‘y’: 2})

In [28]: c.maps
Out[28]: [{‘x’: 1}, {‘y’: 2, ‘z’: 4}

實際使用:
combined = ChainMap(command_line_args, os.environ, defaults)
優先讀取本地變量,然後全局變量,最後默認變量

將很多數據進行匯合使用
message = dict(ChainMap({‘score’: score}, body.detail, black_info))

defaultdict
defaultdict這個對象很方便的在構造字典,而字典的值默認會加載某種方法,
目前已知的方法有list,set,int

s = [(‘red’, 1), (‘blue’, 2), (‘red’, 3), (‘blue’, 4), (‘red’, 1), (‘blue’, 4)]
a = defaultdict(int) 將值默認設置爲int
for k, v in s:
a[k] += 1
print(a)
defaultdict(<class ‘int’>, {‘red’: 3, ‘blue’: 3})

a = defaultdict(list)
for k, v in s:
a[k].append(v)
print(a)
defaultdict(<class ‘list’>, {‘red’: [1, 3, 1], ‘blue’: [2, 4, 4]})

a = defaultdict(set)
for k, v in s:
a[k].add(v)
print(a)
#defaultdict(<class ‘set’>, {‘red’: {1, 3}, ‘blue’: {2, 4}})

namedtuple() 命名元組的工廠函數
namedtuple() 命名元組的工廠函數
from collections import namedtuple

Friend=namedtuple(“Friend”,[‘name’,‘age’,‘email’])

f1=Friend(‘xiaowang’,33,‘[email protected]’)
print(f1)
print(f1.age)
print(f1.email)
f2=Friend(name=‘xiaozhang’,email=‘[email protected]’,age=30)
print(f2)

name,age,email=f2
print(name,age,email)

執行效果:
Friend(name=‘xiaowang’, age=33, email=‘[email protected]’)
33
[email protected]
Friend(name=‘xiaozhang’, age=30, email=‘[email protected]’)
xiaozhang 30 [email protected]

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