2013-08-24 44 views
1

我有字典清單:得到的項值的從字典在python

dictlist = [{'url': 'google.com', 'a': 10, 'content': 'google', 'd': 80, 'f': 1, 'lock': 'dd'}, {'url': 'fb.com', 'z': 25, 'content': 'google', 'd': 60, 'p': 1, 'a': 19}] 

我需要建立從上面dictlist一個新的字典。

newdict= {} 
    sumlist = ['a', 'z', 'd'] #Get values for these from dictlist 
    for dict in dictlist: 
     newdict['newurl'] = dict['url'] 
     newdict['newtitle'] = dict['content'] 
     newdict['sumvalue'] = ????? 
       #so that for 1st item its 'sumvalue'= a + z + d = 10 + 0 + 80 = 90 (zero for 'z') 
       #and 2nd item has 'sumvalue' = a + z + d = 19 + 25 + 60 = 104 

print newdict[0] # should result {'newurl': 'google.com', 'newtitle': 'google', 'sumvalue' : 80 } 

我不知道如何通過的dictlistdict從而遍歷從列表sumlist[]

我需要獲得所有相應的字典項的值的和得到的所有值的總和。

請建議。

回答

1

它看起來像你想的字典與資金內一個新的列表:

dictlist = [{'url': 'google.com', 'a': 10, 'content': 'google', 'd': 80, 'f': 1, 'lock': 'dd'}, 
      {'url': 'fb.com', 'z': 25, 'content': 'google', 'd': 60, 'p': 1, 'a': 19}] 


result = [] 
sumlist = ['a', 'z', 'd'] 
for d in dictlist: 
    result.append({'newurl': d['url'], 
        'newtitle': d['content'], 
        'sumvalue': sum(d.get(item, 0) for item in sumlist)}) 

print result 

打印:

[{'newtitle': 'google', 'sumvalue': 90, 'newurl': 'google.com'}, 
{'newtitle': 'google', 'sumvalue': 104, 'newurl': 'fb.com'}] 

或者,在單相同line:

print [{'newurl': d['url'], 'newtitle': d['content'], 'sumvalue': sum(d.get(item, 0) for item in ['a', 'z', 'd'])} for d in dictlist] 
0

使用dict.get(key, defaultvalue),如果key不在字典中,則會得到defaultvalue。

>>> d = {'a': 1, 'b': 2} 
>>> d.get('a', 0) 
1 
>>> d.get('z', 0) 
0 

>>> dictlist = [ 
...  {'url': 'google.com', 'a': 10, 'content': 'google', 'd': 80, 'f': 1, 'lock': 'dd'}, 
...  {'url': 'fb.com', 'z': 25, 'content': 'google', 'd': 60, 'p': 1, 'a': 19} 
... ] 
>>> 
>>> newdictlist = [] 
>>> sumlist = ['a', 'z', 'd'] 
>>> for d in dictlist: 
...  newdict = {} 
...  newdict['newurl'] = d['url'] 
...  newdict['newtitle'] = d['content'] 
...  newdict['sumvalue'] = sum(d.get(key, 0) for key in sumlist) 
...  newdictlist.append(newdict) 
... 
>>> newdictlist[0] 
{'newtitle': 'google', 'sumvalue': 90, 'newurl': 'google.com'} 
>>> newdictlist[1] 
{'newtitle': 'google', 'sumvalue': 104, 'newurl': 'fb.com'}