1.6.在字典中映射Key到多个Value

问题

multidict的实现?(映射Key到多个Value)

解决方法

字典是单个Key到Value的映射。如果想多Key多Value,那么可以把多个Value存放到容器中(list,set),比如:

d = {
   'a' : [1, 2, 3],
   'b' : [4, 5]
}
e = {
   'a' : {1, 2, 3},
   'b' : {4, 5}
}

关于是使用list还是set取决于应用场景。如果你想保留元素的插入顺序,就使用list;如果你想消除重复(而不考虑排序),就使用set。

想简单构建这样的字典,可以用collections模块的defaultdict,defaultdict的特点是会自动初始化第一个值,所以你只关心添加元素就行,例如:

from collections import defaultdict

d = defaultdict(list)
d['a'].append(1)
d['a'].append(2)
d['b'].append(4)
...
d = defaultdict(set)
d['a'].add(1)
d['a'].add(2)
d['b'].add(4)
...

需要注意的一点是,defaultdict将在Key访问后自动创建字典条目(即便这个Key在字典并不存在)。如果不想要这个行为,你可以对普通字典使用setdefault()方法:

d = {}    # A regular dictionary
d.setdefault('a', []).append(1)
d.setdefault('a', []).append(2)
d.setdefault('b', []).append(4)
...

然而defaultdict这个方法对程序员来说太不人性化了。

讨论

原则上讲,构建一个多值字典很简单,然而初始化第一个value很麻烦,你可能这样做:

d = {}
for key, value in pairs:
    if key not in d:
         d[key] = []
    d[key].append(value)

使用defaultdict简介一些:

d = defaultdict(list)
for key, value in pairs:
    d[key].append(value)

本节和1.15在解决分组记录的问题上很接近。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值