从现有词典列表中创建新的词典列表?

时间:2018-07-11 15:39:51

标签: python dictionary

我有下面的词典列表:

dict1 = [{"id": 1, "name": "tamara", "age":23}, 
         {"id": 1, "name": "mia", "age":14}, 
         {"id": 1, "name": "teo", "age":33}, 
         {"id": 2, "name": "maya", "age":30}}

我想从现有词典列表中创建新的词典列表,如果在字典1中我有相同的“ id”:1 3次,则不要在列表中重复它们,而要在字典中添加字典:

 dict2 = [{"id": 1, newkey: [{"name": "tamara", "age":23}, 
                             {"name":"mia", "age":14}, 
                             {"name": "teo", "age":33}]}, 
          {"id": 2, "name": "maya", "age":30}}

这是我想如何实现的建议?

2 个答案:

答案 0 :(得分:2)

您可以使用itertools.groupby

import itertools
dict1 = [{"id": 1, "name": "tamara", "age":23}, {"id": 1, "name": "mia", "age":14}, {"id": 1, "name": "teo", "age":33}, {"id": 2, "name": "maya", "age":30}]
new_d = [[a, list(b)] for a, b in itertools.groupby(sorted(dict1, key=lambda x:x['id']), key=lambda x:x['id'])]
dict2 = [{'id':a, 'new_key':[{c:d for c, d in i.items() if c != 'id'} for i in b]} for a, b in new_d]

输出:

[{'new_key': [{'age': 23, 'name': 'tamara'}, {'age': 14, 'name': 'mia'}, {'age': 33, 'name': 'teo'}], 'id': 1}, {'new_key': [{'age': 30, 'name': 'maya'}], 'id': 2}]

答案 1 :(得分:0)

使用itertools.groupby

>>> from operator import itemgetter
>>> from itertools import groupby
>>> dict1 = [{"id": 1, "name": "tamara", "age":23}, {"id": 1, "name": "mia", "age":14}, {"id": 1, "name": "teo", "age":33}, {"id": 2, "name": "maya", "age":30}]
>>> [{'id': k, 'new_key':[{k2:v2} for d in list(v) for k2,v2 in d.items() if k2!='id']} for k,v in groupby(dict1, itemgetter('id'))]
# [{'new_key': [{'age': 23}, {'name': 'tamara'}, {'age': 14}, {'name': 'mia'}, {'age': 33}, {'name': 'teo'}], 'id': 1}, {'new_key': [{'age': 30}, {'name': 'maya'}], 'id': 2}]