python cookbook 学习笔记 第一章 数据结构和算法(5)字典中的键映射多个值

构建多重值字典
本文介绍如何在Python中实现一个键对应多个值的字典,包括使用列表和集合存储值,以及利用collections模块中的defaultdict简化多值字典的创建过程。
  • 字典中的键映射多个值
  • 问题:
    • 怎样实现一个键对应多个值得字典(也叫multidict)?
  • 解决方案
    • 一个字典就是一个键对应一个单值的映射。如果想要一个键映射多个值,那么,就需要将这么多个 值放到另外的容器中,比如列表或者集合里。比如,可以像下面这样构造字典:
d = {
    "a": [1, 2, 3],
    "b": [4, 5]
}

e = {
    "a": {1, 2, 3},
    "b": {4,5}
}
  • 选择使用列表还是集合取决于实际需求。如果像保持元素插入的顺序就用列表。如果想去掉重复元素# 就使用集合(并且不关心元素的顺序问题)。

  • 可以使用collections模块中的 defaultdict 来构造这样的字典。defaultdict 的一个特性 是它会自动初始化每个key刚开始的对应值。所以只需要关注添加元素操作就行了。比如:

from collections import defaultdict

d = defaultdict(list)

d["a"].append(1)
d["a"].append(2)
d["b"].append(4)

print(d)

d = defaultdict(set)

d["a"].add(1)
d["a"].add(2)
d["b"].add(4)

print(d)
  • 需要注意的是,defaultdict 会自动为将要访问的键(就算目前字典中并不存在这样的键)创建映射 实体。如果不需要这样的特性,可以在普通的字典上使用setdefault()方法来代替。比如:
d = {}
d.setdefault("a",[]).append(1)
d.setdefault("a",[]).append(2)
d.setdefault("b",[]).append(4)

print(d)
  • 讨论: 一般来讲,创建一个多值映射字典是很简单的。但是如果选择自己实现的话,那么对值得初始化 可能会有点麻烦,可能会像下面这样来实现:
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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值