Python 从复制记录的目录列表中查找属性
我有一张单子。我希望通过字段Python 从复制记录的目录列表中查找属性,python,Python,我有一张单子。我希望通过字段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": "
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}]]
生成将输入列表的
id
s映射到相应对象的字典非常简单:
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'}]
是否需要从dicts中删除所需结果中的
id
字段?不,如果更简单的话,很乐意保留它
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)