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}]

上記から新しい辞書を作成する必要があります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 }

リストからすべての値の合計を取得するためにdictofを反復処理する方法がわかりませんdictlistsumlist[]

それぞれの辞書項目の値の合計を取得する必要があります。

提案してください。

4

2 に答える 2

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'}]

または、1行で同じ:

print [{'newurl': d['url'], 'newtitle': d['content'], 'sumvalue': sum(d.get(item, 0) for item in ['a', 'z', 'd'])} for d in dictlist]
于 2013-08-24T07:35:52.683 に答える
0

を使用するdict.get(key, defaultvalue)と、キーが辞書にない場合に 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'}
于 2013-08-24T07:32:51.063 に答える