首页 > 解决方案 > 将字典列表作为字典键的值

问题描述

我有以下字典列表。

p = [ {"Id": "47","Name": "l","Cate": "GD31","Mark": 0,"Code": "l"},
     {"Id": "58","Name": "k","Cate": "GD33","Mark": 0,"Code": "k"},
    {"Id": "40","Name": "j","Cate": "GD35","Mark": 0,"Code": "j"},
    {"Id": "15","Name": "i","Cate": "GD37","Mark": 0,"Code": "i"},
    {"Id": "39","Name": "h","Cate": "GD39","Mark": 0,"Code": "h"},
    {"Id": "75","Name": "g","Cate": "LD31","Mark": 0,"Code": "g"},
    {"Id": "12","Name": "f","Cate": "LD33","Mark": 0,"Code": "d"},
    {"Id": "92","Name": "e","Cate": "LD35","Mark": 0,"Code": "e"},
    {"Id": "42","Name": "d","Cate": "LD37","Mark": 0,"Code": "d"},
    {"Id": "11","Name": "c","Cate": "LD39","Mark": 0,"Code": "c"},
    {"Id": "51","Name": "b","Cate": "SWW","Mark": 0,"Code": "b"},
    {"Id": "13","Name": "a","Cate": "SMM","Mark": 0,"Code": "a"} ]

在上面的字典中,我想根据等于 GD31 或 LD31 的“Cate”值将特定字典存储到某个变量中。我尝试过的是:

if any(d['Cate'] == 'GD31' or d['Cate'] == 'LD31'  for d in p):
     print('D31 present')

在上面的代码中,我只检查 GD31 或 LD31 是否存在。我需要将特定字典(其中“Cate”值等于 GD31 或 LD31)存储在某个变量中,并更新所选字典,如下所示:

new = [ { 'GD31':[{"Id":"47","Name_G":'l'}],
          'LD31':[{"Id":"75","Name_L":'g'}] }  ]

说明:如果 GD31 和 LD31 都存在,则将 GD31 和 LD31 作为键,将“Id, Name”作为值,然后将 GD31 的“Name”更新为“Name_G”,将 LD31 的“Name”更新为“Name_L”。

我期望结果为:

       new = [ { 'GD31':[{"Id":"47","Name_G":'l'}],
               'LD31':[{"Id":"75","Name_L":'g'}] }  ]

解释:

如果找到 D31,请从字典列表中选择该特定字典。在那个特定的字典中取“Id”和“Name”。因此,GD31 和 LD31 是键,“Id, Name”是值。如果找到 D31,则将 GD31 的“Name”更新为“Name_G”,将 LD31 的“Name_L”更新为“Name_L”。***这适用于所有值 D33、D35、D37 和 D39

希望大家理解。有什么想法吗?

标签: python

解决方案


尝试这个:

p = [{"Id": "47","Name": "l","Cate": "GD31","Mark": 0,"Code": "l"},
    {"Id": "58","Name": "k","Cate": "GD33","Mark": 0,"Code": "k"},
    {"Id": "40","Name": "j","Cate": "GD35","Mark": 0,"Code": "j"},
    {"Id": "15","Name": "i","Cate": "GD37","Mark": 0,"Code": "i"},
    {"Id": "39","Name": "h","Cate": "GD39","Mark": 0,"Code": "h"},
    {"Id": "75","Name": "g","Cate": "LD31","Mark": 0,"Code": "g"},
    {"Id": "12","Name": "f","Cate": "LD33","Mark": 0,"Code": "d"},
    {"Id": "92","Name": "e","Cate": "LD35","Mark": 0,"Code": "e"},
    {"Id": "42","Name": "d","Cate": "LD37","Mark": 0,"Code": "d"},
    {"Id": "11","Name": "c","Cate": "LD39","Mark": 0,"Code": "c"},
    {"Id": "51","Name": "b","Cate": "SWW","Mark": 0,"Code": "b"},
    {"Id": "13","Name": "a","Cate": "SMM","Mark": 0,"Code": "a"} ]

new = [{d["Cate"]: [{"Id": d["Id"], "Name_" + d["Cate"][0]: d["Name"]}] for d in p if "D31" in d["Cate"]}]

print(new)

输出:

[{'GD31': [{'Id': '47', 'Name_G': 'l'}], 'LD31': [{'Id': '75', 'Name_L': 'g'}]}]

推荐阅读