为字典列表中的两个键创建唯一字典

2024-05-20 11:55:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在从API获取以下格式的词典列表:

例如

xlist =[
    { "id":1, "day":2, name:"abc", ... },
    { "id":1, "day":3, name:"abc", ... },
    { "id":1, "day":2, name:"xyz", ... },
    { "id":1, "day":3, name:"xyz", ... },...
  ]   

因此,为了在数据库中存储/优化查询,我必须将它们转换成这种格式。在

  • 什么是产生以下结构的有效或其他方法?在

    unique_xlist =[
      { "id":1, "day":2, name:["abc", "xyz"], ... },
      { "id":1, "day":3, name:["abc", "xyz"], ... },
    ]   
    

我在做什么:

 names = list(set([ v['name'] for v in xlist])) #-- GET UNIQUE NAMES
 templist =  [{k:(names if k == 'name' else v) \
           for k, v in obj.items()} for obj in xlist] #-- Append Unique names
 unique_xlist= {v['day']:v for v in templist}.values() #- find unique dicts

我不认为这是非常有效的,我使用3个循环只是为了找到独特的dicts一天。在


Tags: nameinapiidobjfornames格式
2条回答

只需使用使项目唯一的值作为字典的键:

grouped = {}
for x in xlist:
    key = (x['id'], x['day'])
    try:
        grouped[key]['name'].append(x['name'])
    except KeyError:
        grouped[key] = x
        grouped[key]['name'] = [x['name']]

如果有必要,您可以在以后再次列出。在

您可以使用^{}

from itertools import groupby

xlist.sort(key=lambda x: (x["id"], x["day"], x["name"]))  # or use sorted()
unique_xlist = []

for k, g in groupby(xlist, lambda x: (x["id"], x["day"])):
    unique_xlist.append({"id": k[0], "day": k[1], "name": [i["name"] for i in g]})

相关问题 更多 >