python cookbook 1.6 字典中键映射多个值,dict中key对应多个value,defaultdict

#1.6字典中键映射多个值,也就是一个key对应多个value,即multidict
#dict就是一个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会自动初始化每个key对应的value,所以只需向其中添加元素
from collections import defaultdict
d = defaultdict(list)  #初始的每个key 对应的value为list
d['a'].append(1)
d['a'].append(2)
d['b'].append(3)
print(d)

s = defaultdict(set)  #初始的每个key对应的value为set
s['a'].add(1)
s['a'].add(1)
s['a'].add(2)
s['b'].add(3)
print(s)

#注意,defaultdict会自动为要访问的key(哪怕当前不存在)创建映射实体,比如下面例子并没有d['c'],但它会创建一个空的'c':[]
print(d['c'])
print(d)

print(s['c'])
print(s)

#如果你不需要这样的特性,你可以在普通的字典上使用setdefault()方法代替
d={}
d.setdefault('a',[]).append(1)
d.setdefault('a',[]).append(1)
d.setdefault('a',[]).append(2)
d.setdefault('b',[])  #对应的value为空
d.setdefault('c',[]).append(3)
print(d)

#自己实现一个多值映射字典
d={}
pair=[(1,2),(3,4),(5,6)]
for k,v in pair:
    if k not in d:
        d[k]=[]
    d[k]=v
print(d)

#若使用defaultdict就很简单了
d=defaultdict(list)
for k,v in pair:
    d[k].append(v)
print(d)

猜你喜欢

转载自blog.csdn.net/qq_21997625/article/details/86063345