
在用python处理dict 的时候,有几个该注意的地方,这里跟大家提一下:
1)操作dict 时,尽量少产生新的列表对象。比如:
遍历dict的时候,如果用
dic = {"a":"hello","b":"hi","c":"no"}
for key,value in dic.items():
print(key,value)
此时,dic.items() 会产生一个新的列表对象,占用宝贵的内存,我们可以换成:
for key in dic:
print(key,dic[key])
直接遍历dict中的key,再取出对应key的value
像是判断 key 是否存在字典中,也是相同的道理
dic = {"it":"zhang","hi":"hello"}
s = "hi"
如果我们用以下的判断方法,会产生一个新的列表对象,占用内存
s in dic.keys()
可以直接用:
s in dic
注意一点的是,has_key 在python3中已经被移除,因为用in处理速度更快
2)合并字典
常用的操作是
dict(dic1,**dic2)
{**dic1,**dic2}
这样的合并方式会产生新的字典对象
而如果是 update 更新操作,即是在原来的字典对象上进行更新,如果dic1 和dic2 有相同key,那么dic1 的值会被dic2覆盖
dic1.update(dic2)
3)排序
字典本质上是个无序的容器对象(其实Python3.6开始支持有序,不过这个有序是指按照key的添加顺序),如果我们要对字典的 key 或者 value 排序,一般是将其转换为list,再按照key或者value排序。
4)defaultdict 默认初始化字典
顾名思义,可以用来初始化字典:
dic = defaultdict(int)
看起来和
dic = {}
没啥差别,但是,当你要做数值操作,比如加减乘除,计数啥的,就很有用了,以下是对列表chars 计数的操作
chars = ['a', 'b','c','a','d','c']
dd = defaultdict(int)
for i in chars:
dd[i] += 1
print(i,dd[i])
当我们取字典中不存在的键值时,会报 KeyError 的错误
f = {"a":1,"b":2}
print(f["c"])
此时defaultdict可以对不存在的键赋值,通过传入不同的变量类型,相应的也会输出不同类型变量,如果要制定特定值的话,需要加上lambda 匿名函数
总结defaultdict 的用处:1)初始化字典 2)对不存在的键赋值