一推掸、 字典
1 映射類型數(shù)據(jù)結構介紹
在字典存放的每個元素都是以一對兒鍵值對也物。
在 Python 中 字典通常被稱為 dict,鍵 稱為 key锤灿,值稱為 value
字典中不可以存在相同的 key赘艳,但是 value 可以酌毡。
2 高效創(chuàng)建字典
空字典
In[7]:d1={}In[8]:type(d1)Out[8]:dict
3.dict()轉換為字典
接收一個序列類型的參數(shù),這個序列類型中的每個元素必須是成對兒出現(xiàn)的蕾管。
In[14]:d_tpl=[('a','1'),('b','2'),('c','3')]In[15]:dict3=dict(d_tpl)In[17]:d_tpl2=['a1','b2','c3']In[18]:dict4=dict(d_tpl2)In[21]:dict3isdict4? Out[21]:FalseIn[22]:dict3==dict4? Out[22]:True
4. 哪些數(shù)據(jù)可以作為字典的 kye
key 通常是 字符串
它可以是 Python 中任意不可變類型
比如:
布爾型? True? ? ? 1? ? False? ? ? 0
整型? ? 100? ? ? ? ? ? 200
浮點型? ? 1.0? ? ? ? ? 3.415
元組? ? (1,)? (1, 2, 3)
字符串? 'host_name'
關于字典的key
在 Python 內部用一個哈希表來維護字典中的 key 到 value 的映射關系枷踏。
所以 key 必須是可哈希的。
判斷一個對象是否可哈希掰曾,可以使用hash()函數(shù)
返回一個整數(shù)旭蠕,就是可哈希,反之會拋出 TypeError 異常
hash(1)hash('name')hash((1,2,3))# 列表是可變的數(shù)據(jù)類型旷坦,所有不可以被 hash掏熬,當然也就不能作為 字典的 keyhash([1,2,3])
5. 獲取 key 對應的 value
dict_obj={'a':1,'b':2}dict_obj['a']# key 必須存在,不存在秒梅,拋出異常? ? dict_obj.get('a')# 獲取到 'a' 對應的值(value)dict_obj.get('c')# key 不存在字典中旗芬,則返回 Nonedict_obj.get('c','5')# key 不存在,返回指定的 value
6. 獲取字典所有的 key
dict_obj.keys()
info_dict={"name":'yangge','age':18}d_keys=info_dict.keys()print(d_keys)print(list(d_keys))
循環(huán)字典所有 的key
for key in? d_keys:? ? print(key)
7. 獲取字典所有的 value
dict_obj.values()
info_dict={"name":'yangge','age':18}d_vals=info_dict.values()print(d_vals)print(list(d_vals))
循環(huán)字典所有 的value
forvalind_vals:print(val)
8. 同時獲取字典的 key 和 value
dict_obj.items()
info_dict={"name":'yangge','age':18}item=info_dict.items()print(item)print(list(item))
循環(huán)字典的 key 和 value
for? k, v in? info_dict.items():? ? print(k,? v)
9. 使用=修改或更新字典
可以使用 等號 對字典的key進行直接賦值操作捆蜀。
假如key不存在與字典中疮丛,這個key和 對應值也會被創(chuàng)建到字典中。
In[50]:d5={}In[51]:d5['a']=1In[52]:d5['b']=2In[53]:d5Out[53]:{'a':1,'b':2}In[54]:d5['li']=[1,3,5]In[55]:d5Out[55]:{'a':1,'b':2,'li':[1,3,5]}
10. 使用update()更新字典
把一個已經(jīng)存在的字典中的鍵值對辆它,添加到另一個字典中誊薄。
In[59]:d5Out[59]:{'a':1,'b':2,'li':[1,3,5]}In[60]:d6={'a':2,'d':2,'e':5}In[61]:d5.update(d6)In[62]:d5Out[62]:{'a':2,'b':2,'d':2,'e':5,'li':[1,3,5]}
注意: 更新時,相同的key锰茉,它的值會被新的值替代呢蔫,這個特性同樣適用與=號方式的更新.
python3.5+
x = {'a': 1, 'b': 2}y = {'c': 1, 'd': 2}z = {**x,**y}print(z)
11. 成員判斷
in
In[63]:'a'in d5# 默認就是判斷 'a' 是否存在于字典中的 keys()Out[63]:TrueIn[63]:'a'in d5.keys()Out[63]:TrueIn[75]:'a'not in d5.keys()Out[75]:False
12. 刪除和清空字典
刪除指定的鍵值對
dict_obj={'a':1}deldict_obj['a']# 從字典中刪除指定 key 的鍵值對deldict_obj# 刪除字典本身,字典自身就不存在于內存中了
清空
dict_obj={}dict_obj.clear()# 字典本身還在內存中飒筑,只是內容沒了
pop()
從字典中刪除指定 key 的鍵值對咐刨,并返回這個 key 對應的值
In[49]:d6={'b':2,'c':'3','d':'new key','li':[1,3,5]}In[50]:li=d6.pop('li')In[51]:print(li)Out[51]:[1,3,5]
13. 用字典實現(xiàn) switch … case 語句
Python 中沒有 switch … case 語句昙衅,這個問題Python之父龜叔表示這個語法過去沒有,現(xiàn)在沒有定鸟,以后也不會有。因為Python簡潔的語法完全可以用 if … elif 實現(xiàn)著瓶。如果有太多的分支判斷联予,還可以使用字典來代替。
arg=input(">>:")ifarg=="0":print('zero')elifarg=="1":print('one')elifarg=="2":print("two")else:print("nothing")
建議使用下面的代碼實現(xiàn)
arg=input(">>:")data={"0":"zero","1":"one","2":"two",}data.get(arg,"nothing")
二材原、集合
1 集合特性介紹
在 python 中集合看起來像是只有 key 的字典{'disk','cpu','memory','motherboard'}在 python 解釋器中表現(xiàn)為set集合內的元素不允許重復
2 高效創(chuàng)建集合和轉換
set()
In[96]:s1=set()In[97]:s1Out[97]:set()
轉換
In[99]:set('disk')Out[99]:{'d','i','k','s'}In[100]:set(['disk','cpu','memory'])Out[100]:{'cpu','disk','memory'}In[101]:set(('disk','cpu','memory'))Out[101]:{'cpu','disk','memory'}In[102]:set({'disk':'560G','cpu':'4'})Out[102]:{'cpu','disk'}
3 集合運算
a.&交集
獲取兩個集合都有的元素
In[55]:s1={"192.168.1.51","192.168.1.45"}In[56]:s2={"192.168.1.51","192.168.1.78",}In[57]:s1&s2Out[57]:{'192.168.1.51'}
b.|并集
把兩個集合的元素合并在一起沸久,產(chǎn)生一個新的集合
In[60]:s1|s2Out[60]:{'192.168.1.45','192.168.1.51','192.168.1.78'}
c.-差集
返回第一個集合中獨有的元素。
就是只保留在第一個集合中出現(xiàn)并且不在第二個集合中出現(xiàn)的元素余蟹。
In[55]:s1={"192.168.1.51","192.168.1.45"}In[56]:s2={"192.168.1.55","192.168.1.51"}In[61]:s1-s2Out[61]:{'192.168.1.45'}In[62]:s2-s1Out[62]:{'192.168.1.78'}
^異或運算
獲取兩個集合的分別獨有的元素卷胯,組合為一個新的集合對象。
In[55]:s1={"192.168.1.51","192.168.1.45"}In[56]:s2={"192.168.1.55","192.168.1.51"}In[63]:s1^s2Out[63]:{'192.168.1.45','192.168.1.78'}
大型數(shù)據(jù)結構應用場景
host_info=[]host_info.append({'192.168.1.11':{'cpu':['Intel(R) Core(TM) i5-5350U CPU @ 1.80GHz',4,1],'memory':['16','4','2'],'disk':['1T','2T']}})host_info.append({'192.168.1.12':{'cpu':['Intel(R) Core(TM) i5-5350U CPU @ 1.80GHz',4,1],'memory':['16','4','2'],'disk':['1T','2T']}})
取到"1T"
print(host_info[0])print(host_info[0].get('192.168.1.11').get('disk')[0])