python字典一键多值_Python cookbook笔记——一键多值字典(multidict)

字典是一种关联容器,每个键都映射到一个单独的值上,如果想让键映射到多个值,需要将这多个值保存到另一个容器如列表或集合中

如果希望保留元素插入的顺序,就用列表;如果希望消除重复元素且不在意他们的顺序,就用集合

1.collections模块中的defaultdict类

1) defaultdict类的一个特点是它会自动初始化第一个值,这样只需要关注添加元素即可

d = defaultdict(set)

d['a'].add(1)

d = defaultdict(list)

d['a'].append(1)

2) defaultdict会自动创建字典表项以待稍后的访问(即使这些表项在字典中还没有找到,若不想使用此功能,可以在普通的字典上调用setdefault()方法来取代

如d = {}# a regular dictionary

d.setdefault('a',[]).append()

2. collections中的OrderedDict类

3) 让字典保持有序,对字典做迭代时,会按照元素初始添加的顺序进行

当想构建一个映射结构一遍稍后进行序列化或转换为另一种格式时,OrderedDict类非常有用,如进行JSON编码时希望精确控制各字段的顺序,那么首先在OrderedDict中构建数据即可

2) OrderedDict内部维护了一个双向链表,会根据元素加入的顺序来排列键的位置,新加入的元素被放在链表末尾,对已存在的键重新赋值不会改变键的顺序

OrderedDict的内存开支是普通字典的两倍多,是由于额外创建的链表所致,构建一个涉及大量OrderedDict实例的数据结构,需要权衡使用OrderedDict的好处能否超过内存开销带来的缺点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值