多值字典

通常情况下,我们使用字典dict的一般打开方式是这样的:

>>>a=dict()  #or a={}
>>>a['name']='kss'
>>>a['city']='beijing'
>>>a['school']='bupt'
>>>a
{'city': 'beijing', 'school': 'bupt', 'name': 'kss'}
注意:字典是无序的

然而,有的时候我们往往需要让一个键对应多个值,比如当你填写学校的时候,可能不止在一所学校待过。这种情况下,通常有两种方法:

#way one
>>>a=dict()  #or a={}
>>>a['name']='kss'
>>>a['city']=['beijing','wuhan']
>>>a['school']=['bupt','ccnu']
>>>a
{'city': ['beijing', 'wuhan'], 'school': ['bupt', 'ccnu'], 'name': 'kss'}
>>>a['school'].append('pku')
>>>a
{'city': ['beijing', 'wuhan', 'jian'], 'school': ['bupt', 'ccnu', 'pku'], 'name': 'kss'}
#初始化时把value值定义成容器形式,这样一来可以在后面尽情的添加value

#way two
>>>from collections import defaultdict
>>>a=defaultdict(list)
>>>a
defaultdict(<class 'list'>, {})
>>>a['name'].append('kss')
>>>a['city'].append('beijing')
>>>a['city'].append('wuhan')
>>>a['school'].append('bupt')
>>>a['school'].append('ccnu')
>>>a
defaultdict(<class 'list'>, {'city': ['beijing', 'wuhan'], 'school': ['bupt', 'ccnu'], 'name': ['kss']})
#说明,defaultdict默认初始化可以指定工厂函数(类似于list,set),然后会默认为每个key创建一个容器对象,然后你就可以默默的添加value了。但是注意,appendadd方法每次只能添加一个元素。

最后,提一下,针对defaultdict的这种默认为value初始化容器的功能我们在普通dict也能实现,可以利用setdefault方法帮忙。看代码:

>>>a=dict()
>>>a.setdefault('city',[]).append('beijing')
>>>a.setdefault('city',[]).append('wuhan')
>>>a
{'city': ['beijing', 'wuhan']}
#看,同样实现了一键多值

只是setdefault在每次调用的时候都需要创建[],也显得繁琐,因此一般都用defaultdict代替。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值