Python字典

字典是python重要的組合數據類型。字典的操作比列表更復雜,但二者有相似之處,我建議學習字典可以類比列表的某些操作


1.基本概念

  • 字典是無序的對象集合,使用鍵-值(key-value)存儲,具有極快的查找速度
  • 鍵(key)必須使用不可變類型
  • 同一個字典中,鍵(key)必須是唯一

2.常用方法

方法 描述
keys() 返回字典中列表
values () 返回字典中列表
items() 返回元組的列表。每個元組由字典的鍵和相應值組成
clear() 刪除字典的所有條目。
copy () 返回字典高層結構的一個拷貝,但不復制嵌入結構,而只複製對那些結構的引用。
update (x) 用字典x中的鍵值對更新字典內容。
get (x[, y]) 返回鍵x,若未找到該鍵返回none,若提供y,則未找到x時返回

3.創建字典

(1)dict函數(通過映射)
>>> #創建字典:dict函數(通過映射)
>>> items=[('name','Gumby'),('age',42)]
>>> d=dict(items)
>>> d
{'name': 'Gumby', 'age': 42}
>>> #dict函數也可以通過關鍵字參數來創建字典
>>> d=dict(name='Mike',age=20)
>>> d
{'name': 'Mike', 'age': 20}
(2)直接賦值
>>> d['Mary']=10 
{'name': 'Mike', 'age': 20, 'Mary': 10}
(3)使用for循環
>>> squares={x:x**2 for x in range(1,10)}
>>> squares
{1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
(4)由列表來創建字典
>>> l1=['a','b','c']
>>> l2=[1,2,3]
>>> d=dict(list(zip(l1,l2))) #向dict()傳入一個元組列表 [(,),(,)]
>>> d
{'a': 1, 'b': 2, 'c': 3}

4.字典元素訪問

>>> d=dict(name='Alice',age=18,sex='F')
>>> d.get('age')
18
>>> d.get('address','無')
'無'
>>> list(d)
['name', 'age', 'sex']
>>> list(d.values())
['Alice', 18, 'F']
>>> list(d.keys())
['name', 'age', 'sex']
>>> list(d.items())
[('name', 'Alice'), ('age', 18), ('sex', 'F')]
>>> for key,value in d.items():
		print(key,value,sep='\t')	

name	Alice
age	    18
sex	    F

5.字典的修改、添加與刪除

(1)修改與添加 update()
#dict.update(dict) 如果兩個字典中存在相同的“鍵”,則以另一個字典中的“值”爲準來更新
>>> sock={'IP':'127.0.0.1','port':80}
>>> sock.update({'IP':'192.168.9.62','protocol':'TCP'})
>>> sock
{'IP': '192.168.9.62', 'port': 80, 'protocol': 'TCP'}
#與update相似的操作**
>>>x = {'a': 1, 'b': 2}
>>>y = {'b': 3, 'c': 4}
>>>z = {**x, **y}
{'a': 1, 'b': 3, 'c': 4}
(2)與update()類似的**操作
>>>x = {'a': 1, 'b': 2}
>>>y = {'b': 3, 'c': 4}
>>>z = {**x, **y}
{'a': 1, 'b': 3, 'c': 4}
(3)刪除
>>> sock={'IP': '192.168.9.62', 'port': 80, 'protocol': 'TCP'}
>>> print(sock.pop('IP'))
192.168.9.62
>>> sock
{'port': 80, 'protocol': 'TCP'}
>>> print(sock.popitem())
('protocol', 'TCP')
>>> sock
{'port': 80}
>>> del sock['port']
>>> sock
{}

6. get()與實例分析

get (x[, y]) 返回鍵x,若未找到該鍵返回none,若提供y,則未找到x時返回y,即y爲缺省值

>>> examples = {
    1: 'A',
    2: 'B',
    3: 'c',
}
	
>>> def func(number):
	return examples.get(number, 'None')

>>> func(1)
'A'
>>> func(2)
'B'
>>> func(0)
'None

已知爬蟲已經爬取到2019年中排名前20的大學,並存儲uinfo列表中,如下

>>>uinfo
[['1', '清華大學', '北京'],
 ['2', '北京大學', '北京'],
 ['3', '浙江大學', '浙江'],
 ['4', '上海交通大學', '上海'],
 ['5', '復旦大學', '上海'],
 ['6', '中國科學技術大學', '安徽'],
 ['7', '華中科技大學', '湖北'],
 ['7', '南京大學', '江蘇'],
 ['9', '中山大學', '廣東'],
 ['10', '哈爾濱工業大學', '黑龍江'],
 ['11', '北京航空航天大學', '北京'],
 ['12', '武漢大學', '湖北'],
 ['13', '同濟大學', '上海'],
 ['14', '西安交通大學', '陝西'],
 ['15', '四川大學', '四川'],
 ['16', '北京理工大學', '北京'],
 ['17', '東南大學', '江蘇'],
 ['18', '南開大學', '天津'],
 ['19', '天津大學', '天津'],
 ['20', '華南理工大學', '廣東']]

現在想統計前20大學的地區分佈情況,並用字典存儲,用get()函數就很容易做到

>>>count_dic={}
>>>for i in uinfo:
    if count_dic.get(i[2]):  #如果字典中不存在,返回None
            count_dic[i[2]]+=1
        else:
            count_dic[i[2]]=1

>>>count_dic
{'北京': 4,
 '浙江': 1,
 '上海': 3,
 '安徽': 1,
 '湖北': 2,
 '江蘇': 2,
 '廣東': 2,
 '黑龍江': 1,
 '陝西': 1,
 '四川': 1,
 '天津': 2}

用字典處理後,就方便對其進行排序

>>>rank=sorted(count_dic.items(),key=lambda x:x[1],reverse=True)
>>>rank
[('北京', 4),
 ('上海', 3),
 ('湖北', 2),
 ('江蘇', 2),
 ('廣東', 2),
 ('天津', 2),
 ('浙江', 1),
 ('安徽', 1),
 ('黑龍江', 1),
 ('陝西', 1),
 ('四川', 1)]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章