Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从复制记录的目录列表中查找属性_Python - Fatal编程技术网

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)