python 字典笔记 剩余补充

120 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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"])

image.png

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)

image.png

3 小结

字典的数据结构本身是无序的,从python3.6开始,官方帮我们处理了,你打印出来的结果是有序的,对于字典无序的解决方式,可以使用OrderedDict方法解决。还有当我想打印的key或者使用到了不存在的key,希望在字典中,得到默认值并且可以我们自定义它,defaultdict允许传入自定义函数,只需要通过自定义函数,返回个值,当我们再次使用不存在的key时,自动填入我们自定义的值。