2013-08-20 114 views
1

我有一本字典看起来像这样:Python的字典更新和追加

{"TIM" : [[xx,yy],[aa,bb]] , "SAM" : [[yy,cc]] } 

我想要的值[tt,uu]添加到"SAM"如果不设定目前不存在。

另外我想添加“KIM”与[ii,pp]

我有两个if:s的解决方案,但有没有更好的?我该如何做这些事情?

编辑:

array ={} 
    if not name in array : 
     array = array, {name : {()}} 
    if not (value1,value2,rate) in array[name] : 
     array.update({(value1,value2,rate)}) 

回答

2

使用defaultdict

>>> from collections import defaultdict 
>>> d = defaultdict(list) # create the dictionary, then populate it. 
>>> d.update({"TIM":[['xx', 'yy'], ['aa', 'bb']], "SAM":[['yy', 'cc']]}) 
>>> d # see its what you wanted. 
defaultdict(<type 'list'>, {'TIM': [['xx', 'yy'], ['aa', 'bb']], 'SAM': [['yy', 'cc']]}) 
>>> d["SAM"].append(['tt','uu']) # add more items to SAM 
>>> d["KIM"].append(['ii','pp']) # create and add to KIM 
>>> d # see its what you wanted. 
defaultdict(<type 'list'>, {'TIM': [['xx', 'yy'], ['aa', 'bb']], 'KIM': [['ii', 'pp']], 'SAM': [['yy', 'cc'], ['tt', 'uu']]}) 

如果你想在字典中的值是套,这是没有问题的:

>>> from collections import defaultdict 
>>> d = defaultdict(set) 
>>> d.update({"TIM":set([('xx', 'yy'), ('aa', 'bb')]), "SAM":set([('yy', 'cc')])}) 
>>> d["SAM"].add(('tt','uu')) 
>>> d["KIM"].add(('ii','pp')) 
>>> d 
defaultdict(<type 'set'>, {'TIM': set([('xx', 'yy'), ('aa', 'bb')]), 'KIM': set([('ii', 'pp')]), 'SAM': set([('tt', 'uu'), ('yy', 'cc')])}) 
1

可以使用setdefault方法:

>>> d = {'TIM':[['xx', 'yy'], ['aa', 'bb']], 'SAM':[['yy', 'cc']]} 
>>> d.setdefault('SAM', []).append(['tt','uu']) 
>>> d.setdefault('KIM', []).append(['ii','pp']) 
>>> d 
{'TIM': [['xx', 'yy'], ['aa', 'bb']], 'KIM': [['ii', 'pp']], 'SAM': [['yy', 'cc'], ['tt', 'uu']]}