我有一个dicts列表。我希望通过字段id
找到所有唯一记录,并从各种不同的事件中获取不同的属性。
原始清单:
[{"id": "chehjkndskns", "att_a" : 12, "time" : 4},{"id": "chehjkndskns", "att_a" : 15, "time" : 5}, {"id": "sjnd", "att_a" : 14, "time" : 4},{"id": "sjnd", "att_a" : 166, "time" : 5}]
期望的结果:
[{"id": "chehjkndskns", "attributes" : [{"att_a" : 12, "time" :4},{"att_a" : 15, "time" : 5}], {"id": "sjnd", "attributes" : [{"att_a" : 14, "time" :4},{"att_a" : 166, "time" : 5}]]
答案 0 :(得分:2)
生成一个将输入列表的id
映射到相应对象的字典很简单:
from collections import defaultdict
original = [{"id": "chehjkndskns", "att_a" : 12, "time" : 4},{"id": "chehjkndskns", "att_a" : 15, "time" : 5}, {"id": "sjnd", "att_a" : 14, "time" : 4},{"id": "sjnd", "att_a" : 166, "time" : 5}]
result = defaultdict(lambda: [])
for val in original:
result[val["id"]] += [val]
print(result)
# {'sjnd': [{'att_a': 14, 'time': 4, 'id': 'sjnd'}, {'att_a': 166, 'time': 5, 'id': 'sjnd'}], 'chehjkndskns': [{'att_a': 12, 'time': 4, 'id': 'chehjkndskns'}, {'att_a': 15, 'time': 5, 'id': 'chehjkndskns'}]}
如果你真的想要你所描述的数组格式的结果,你可以简单地添加一个额外的步骤来改变它:
result = [{"id": key, "attributes": val} for key, val in result.items()]
print(result)
# [{'attributes': [{'time': 4, 'att_a': 12, 'id': 'chehjkndskns'}, {'time': 5, 'att_a': 15, 'id': 'chehjkndskns'}], 'id': 'chehjkndskns'}, {'attributes': [{'time': 4, 'att_a': 14, 'id': 'sjnd'}, {'time': 5, 'att_a': 166, 'id': 'sjnd'}], 'id': 'sjnd'}]
答案 1 :(得分:0)
list1 =[{"id": "chehjkndskns", "att_a" : 12, "time" : 4},
{"id": "chehjkndskns", "att_a" : 15, "time" : 5},
{"id": "sjnd", "att_a" : 14, "time" : 4},
{"id": "sjnd", "att_a" : 166, "time" : 5}]
new_list = map(lambda d: [{'id': d['id'],'attributes': [{'att_a': d['att_a'], 'time':d['time']}]}], list1)