Python——字典dict
dict的优势和限制:
1,键必须是可散列的;
2,字典在内存上的开销巨大;
3,键查询很快;
dict的实现是典型的空间换时间:字典类型有着巨大的内存开销,但它们提供了无视数据量大小的快速访问——只要字典能被装在内存里。
注意事项:
1,不要对字典同时进行迭代和修改;
如果想扫描并修改一个字典,最好分成两步来进行:首先对字典迭代,以得出需要添加的内容,把这些内容放在一个新字典里;迭代结束之后再对原有字典进行更新。
2,在Python 3中,.keys( )、.items( )和.values( )方法返回的都是字典视图。也就是说,这些方法返回的值更像集合,而不是像Python 2那样返回列表。
视图还有动态的特性,它们可以实时反馈字典的变化。
应用:
1,对字典dict使用max函数;
2,
字典:
collections.defalutdict
查看下面代码运行结果
1 cities={ 2 '北京':{ 3 '朝阳':['国贸','CBD','天阶','我爱我家','链接地产'], 4 '海淀':['圆明园','苏州街','中关村','北京大学'], 5 '昌平':['沙河','南口','小汤山',], 6 '怀柔':['桃花','梅花','大山'], 7 '密云':['密云A','密云B','密云C'] 8 }, 9 '河北':{ 10 '石家庄':['石家庄A','石家庄B','石家庄C','石家庄D','石家庄E'], 11 '张家口':['张家口A','张家口B','张家口C'], 12 '承德':['承德A','承德B','承德C','承德D'] 13 } 14 } 15 16 17 18 print(cities["北京"]) 19 print(type(cities["北京"])) 20 21 22 #默认cities['北京']是遍历键keys, cities['北京']的结果仍然是一个字典dict 23 for i in cities['北京']: 24 print(i) 25 26 27 for i in cities['北京'].items(): 28 print(i) 29 30 for i in cities['北京'].values(): 31 print(i)
字典交换key,value
# 字典可以通过以下方法调换 key和 value,当然要注意原始 value 的类型,必须是不可变类型: d = {'a': 1, 'b': 2, 'c': 3} reverse = {v: k for k, v in d.items()} print(d) print(reverse)
prices = { 'A':123, 'B':450.1, 'C':12, 'E':444,} #网友方法:这种是把value转换成了 max_prices = max(zip(prices.values(), prices.keys())) print(max_prices) # (450.1, 'B') print("\n个人方法:") #返回最大的键 print('默认是Keys()结果中的最大值:',max(prices)) print('Keys()结果中的最大值: ',max(prices.keys())) print('values()结果中的最大值: ', max(prices.values())) print('items()结果中的最大值: ',max(prices.items()))
max(dic)返回字典中最大的Key值,max(dic,key=dic.get)返回字典中最大值values对应的key
#max(dic)返回字典中最大的Key值,max(dic,key=dic.get)返回字典中最大值values对应的key dic1={'a':4,'b':19,'c':2,'d':13} mask=max(dic1) mask2=max(dic1,key=dic1.get) print("\n该例子的字典为:{'a':4,'b':19,'c':2,'d':13}") print("\nmax(dic)返回的结果:",mask) print("max(dic,key=dic.get)返回的结果:",mask2) dic2={'a':4,'b':19,'e':2,'d':22} mask2=max(dic2) mask22=max(dic2,key=dic2.get) print("\n-------------------------------------------") print("该例子的字典为:{'a':4,'b':19,'c':2,'d':13}\n") print("max(dic)返回的结果:",mask2) print("max(dic,key=dic.get)返回的结果:",mask22)
结果:
END