创建一键多值字典(multidict)及对字典排序

multidict

一般的创建一键多值字典的方法如下:

# 保留元素插入顺序,则用列表
d = {
      'a': [1, 2, 3],
      'b': [4, 5]
}
# 消除重复的元素(而不在意他们的顺序),则用集合
e = {
      'a': {1, 2, 3}, 
      'b': {4, 5}
}

下面使用collections.defaultdict来创建字典:

from collections import defaultdict

d = defaultdict(list)  # dict的value是list类型
d['a'].append(1)
d['a'].append(2)
d['b'].append(3)
d
Out[18]: defaultdict(list, {'a': [1, 2], 'b': [3]})

d = defaultdict(set)
d['c'].add(1)
d['c'].add(2)
d['d'].add(3)
d
Out[20]: defaultdict(set, {'c': {1, 2}, 'd': {3}})

因此对defaultdict类型的字典做更新操作更方便了:

d
Out[22]: defaultdict(list, {'a': [1, 2], 'b': [3]})
for k, v in d.items():
    d[k].append(v)
    
d
Out[24]: defaultdict(list, {'a': [1, 2, [...]], 'b': [3, [...]]})
对字典排序

使用collections.OrderedDict类来创建有序字典:

from collections import OrderedDict
d = OrderedDict()
d['a'] = 1
d['b'] = 2
d['c'] = 3
d
Out[7]: OrderedDict([('a', 1), ('b', 2), ('c', 3)])

有序字典的使用示例:

data = {'a': 1, 'c': 2, 'd': 3, 'b': 4}
d = OrderedDict([key, data[key]] for key in sorted(data.keys()))
d
Out[10]: OrderedDict([('a', 1), ('b', 4), ('c', 2), ('d', 3)])  # 排序后
import json
json.dumps(d)
Out[12]: '{"a": 1, "b": 4, "c": 2, "d": 3}'

注意:
1、OrderedDict内部维护了一个双向链表,它会根据元素的加入顺序来排列键的位置。
2、OrderedDict的大小是普通字典的两倍多,这是由于额外创建的链表所致。
3、实际应用中根据数据量大小来衡量是否采用OrderedDict。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值