Python算法详解
上QQ阅读APP看书,第一时间看更新

2.3.3 映射多个值

在Python程序中,可以创建将某个键映射到多个值的字典,即一键多值字典[multidict]。为了能方便地创建映射多个值的字典,可以使用内置模块collections中的defaultdict()函数来实现。defaultdict()函数的一个主要特点是能自动初始化第一个值,这样只需要关注添加元素即可。下面的实例文件yingshe.py演示了创建一键多值字典的过程。

源码路径:daima\第2章\yingshe.py

①d = {
    'a': [1, 2, 3],
    'b': [4, 5]
}
e = {
    'a': {1, 2, 3},
    'b': {4, 5}
②}
from collections import defaultdict
③d = defaultdict(list)
d['a'].append(1)
d['a'].append(2)
④d['a'].append(3)
print(d)
⑤d = defaultdict(set)
d['a'].add(1)
d['a'].add(2)
d['a'].add(3)
⑥print(d)
⑦d = {}
d.setdefault('a', []).append(1)
d.setdefault('a', []).append(2)
d.setdefault('b', []).append(3)
⑧print(d)
d = {}
⑨for key, value in d:  # pairs:
    if key not in d:
          d[key] = []
    d[key].append(value)
d = defaultdict(list)
⑩print(d)
⑪for key, value in d:  # pairs:
    d[key].append(value)
⑫print(d)

上述代码中用到了内置函数setdefault(),如果键不存在于字典中,将会添加键并将值设为默认值。首先在①~②中创建了一个字典,③~④和⑤~⑥分别利用两种方式为字典中的键创建相同的多键值。因为函数defaultdict()会自动创建字典表项以待稍后访问,所以不想要这个功能,可以在普通的字典上调用函数setdefault()来取代defaultdict(),如⑦~⑧所示。⑨~⑩和⑪~⑫分别演示了两种对一键多值字典中的第一个值继续初始化的方法,可以看出⑪~⑫使用defaultdict()函数的方法比较清晰明了。执行结果如图2-23所示。

图2-23 执行结果