通常情况下,我们使用字典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了。但是注意,append或add方法每次只能添加一个元素。
最后,提一下,针对defaultdict的这种默认为value初始化容器的功能我们在普通dict也能实现,可以利用setdefault方法帮忙。看代码:
>>>a=dict()
>>>a.setdefault('city',[]).append('beijing')
>>>a.setdefault('city',[]).append('wuhan')
>>>a
{'city': ['beijing', 'wuhan']}
#看,同样实现了一键多值
只是setdefault在每次调用的时候都需要创建[],也显得繁琐,因此一般都用defaultdict代替。