2017-09-10 28 views
1

相似所以我这一下Python字典的名单如下:添加键的值的基础上,其他主要

[{"word": 'app idea', "post" : 'i just had an app idea', "likes" : 22}, 
{"word": 'app idea', "post" : 'this is a great app idea', "likes" : 29}, 
{"word": 'app development', "post" : 'let us start our app development', "likes" : 32}, 
{"word": 'app development', "post" : 'app development will take time', "likes" : 23}, 
{"word": 'app data', "post" : 'delete the app data', "likes" : 32}] 

我要添加喜欢那里的字是相同

所以最终输出看起来像这样

[{"word": 'app idea', "likes" : 51}, 
{"word": 'app development', "likes" : 55}, 
{"word": 'app data', "likes" : 32}] 

回答

1
在一行

,使用itertools.groupby,字典&列表理解

  • 组通过的word
  • 值的类型的字典重建使用likes值的总和和word密钥的值的类型的字典,在列表理解

代码使用字典理解:

list_of_dicts = [{"word": 'app idea', "post" : 'i just had an app idea', "likes" : 22}, 
{"word": 'app idea', "post" : 'this is a great app idea', "likes" : 29}, 
{"word": 'app development', "post" : 'let us start our app development', "likes" : 32}, 
{"word": 'app development', "post" : 'app development will take time', "likes" : 23}, 
{"word": 'app data', "post" : 'delete the app data', "likes" : 32}] 

import itertools 

result = [{"word":k,"likes":sum(v["likes"] for v in vl)} for k,vl in itertools.groupby(list_of_dicts,key=lambda k : k["word"])] 

结果:

[{'word': 'app idea', 'likes': 51}, {'word': 'app development', 'likes': 55}, {'word': 'app data', 'likes': 32}]