zoukankan      html  css  js  c++  java
  • 『Python CoolBook:Collections』数据结构和算法_容器型value字典&顺序字典

    一、collections.defaultdict:多值映射字典

    defaultdict省去了初始化容器的过程,会默认value对象为指定类型的容器

    指定list时可以使用.append,

    from collections import defaultdict
    
    d = defaultdict(list)
    
    d['a'].append(1)
    d
    

    defaultdict(list, {'a': [1]}) 

    指定set时可以使用.add,

    d = defaultdict(set)
    
    d['a'].add(1)
    d['a'].add(1)
    d
    

     defaultdict(set, {'a': {1}})

    原字典可以使用.setdefault方法指定value为容器,但是不太推荐,如下,

    d = {}
    d.setdefault('a', []).append(1)
    d.setdefault('a', []).append(2)
    d.setdefault('b', []).append(3)
    d.setdefault('c', {1,2,3}) #默认的dict对象没有add方法,非使用append也不行
    # 由于默认的方法中每次添加新的元素都要创建新的空对象[],所以不推荐
    d
    

    {'a': [1, 2], 'b': [3], 'c': {1, 2, 3}} 

    顺便,字典的内容是key值,

    'a' in d # 字典in的是key
    

    True 

    二、collections.OrderedDict:含序字典

    OrderedDict内部维护着一个双向链表用于记录键值插入的顺序,更新键值不会影响原有顺序,插入键值会插入在末尾,所以其内存消耗为普通字典的两倍

    from collections import OrderedDict
    
    d = OrderedDict()
    d['a'] = 1
    d['c'] = 3
    d['b'] = 2
    print(d, d.items())
    

    OrderedDict([('a', 1), ('c', 3), ('b', 2)])

    odict_items([('a', 1), ('c', 3), ('b', 2)]) 

    含序字典实际上常和json连用,用于输出信息,

    import json
    # 对字典进行编码,使用OrderdDict可以控制字段顺序
    
    json.dumps(d)
    

     '{"a": 1, "c": 3, "b": 2}'

  • 相关阅读:
    几个不错的网页载入页面
    .NET 中关于日期时间的格式化处理
    防止网站内容被人小偷和采集的ASP代码
    .Net学习资源集
    Net程序如何防止被注入(整站通用)
    一个采集入库生成本地文件的几个FUCTION
    网页数据采集小偷
    浅谈自动采集程序及入库
    网页图片处理JS代码整理
    spark导入工程后,出现一些错误
  • 原文地址:https://www.cnblogs.com/hellcat/p/8577101.html
Copyright © 2011-2022 走看看