2016-11-28 70 views
-1

我有一个dictionarylist看起来像这样:如何将python一起加入相同的字典元素?

[{'queryID': '1', 'documentID': '184'}, 
{'queryID': '1', 'documentID': '29'}, 
{'queryID': '1', 'documentID': '31'}, 
{'queryID': '1', 'documentID': '12'}, 
{'queryID': '2', 'documentID': '12'}, 
{'queryID': '2', 'documentID': '15'}, 
{'queryID': '2', 'documentID': '184'}, 
{'queryID': '2', 'documentID': '858'}, 
{'queryID': '2', 'documentID': '51'}, 
{'queryID': '2', 'documentID': '102'}] 

如何queryID键改变dictionarylist成格式如

[{'queryID': '1','documentID':'184','29','31','12'}, 
{'queryID': '2','documentID':'12','15','184','858','51','102}] 
+0

的预期结果是无效的字典 – styvane

+0

http://stackoverflow.com/a/40783207/1527217 – khajvah

回答

2

看起来要组字典的列表,并获得每组的documentID列表。
预期的输出,在这种情况下,应该包含documentID小号
使用的序列如下方式与itertools.groupbyoperator.itemgetter功能:

import itertools, operator 

l = [{'queryID': '1', 'documentID': '184'}, 
{'queryID': '1', 'documentID': '29'}, 
{'queryID': '1', 'documentID': '31'}, 
{'queryID': '1', 'documentID': '12'}, 
{'queryID': '2', 'documentID': '12'}, 
{'queryID': '2', 'documentID': '15'}, 
{'queryID': '2', 'documentID': '184'}, 
{'queryID': '2', 'documentID': '858'}, 
{'queryID': '2', 'documentID': '51'}, 
{'queryID': '2', 'documentID': '102'}] 

l.sort(key=operator.itemgetter('queryID')) 

result = [{'queryID': k, 'documentID': [d['documentID'] for d in v ]} 
      for k,v in itertools.groupby(l, key=operator.itemgetter('queryID'))] 

print(result) 

输出:

[{'documentID': ['184', '29', '31', '12'], 'queryID': '1'}, {'documentID': ['12', '15', '184', '858', '51', '102'], 'queryID': '2'}] 
相关问题