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)]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章