持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第18天,点击查看活动详情
0 环境
- 编辑器:idea或vscode
- 系统版本:windows10
- python版本:3.9.6
1 defaultdict其他用法
defaultdict初始化时要传入工厂函数,比如字典传入列表,当键不存在时,默认赋值空数组,但是我想要自定义的默认值,就好像之前dict.fromkeys一样可以赋自定义的值,defaultdict也可以实现,自定义函数,并且设置返回值,defaultdict初始化时,并传入到defaultdict中,当键不存在,默认传入"11",代码如下:
from collections import defaultdict
def factory_value():
return "11"
def default_demo1():
d = defaultdict(factory_value)
print(d["1"])
print(d["2"])
print(d)
d["1"] = "567"
print(d["1"])
2 有序字典
这里的有序和列表中append方法一样,元素依次插入的那种,位置固定下来了,不是那种先对字典的key或value先排序,然后展示有序的结果那种。怎么使用呢,代码如下:先导入from collections import OrderedDict,然后调用并赋值变量,d = OrderedDict(),其他方法和之前的字典操作一样的,看变量b的打印结果,最终结果 --> [(key,value),...],这也侧面说明了它为啥可以有序了。当然遍历的方式和之前的字典的类似,当然当数据量小的时候,你会发现用普通字典赋值,比如 d = {},在对它赋值键值对,你会发现它也是有序的结果,别被假象迷惑,一旦数据量起来了,就不一定有序了,还有一种可能是,从python3.6开始,字典变的有序了,但请记住是官方做了处理,并非它自身就是有序的。
from collections import OrderedDict
def order_demo():
d = OrderedDict()
d[0] = 10
d[1] = 11
d[8] = 18
d[4] = 14
d[2] = 12
print(d)
for k, v in d.items():
print(k, v)
3 小结
字典的数据结构本身是无序的,从python3.6开始,官方帮我们处理了,你打印出来的结果是有序的,对于字典无序的解决方式,可以使用OrderedDict方法解决。还有当我想打印的key或者使用到了不存在的key,希望在字典中,得到默认值并且可以我们自定义它,defaultdict允许传入自定义函数,只需要通过自定义函数,返回个值,当我们再次使用不存在的key时,自动填入我们自定义的值。