词典列表作为词典列表关键字的值

时间:2019-11-11 02:20:30

标签: python

我有以下词典列表。

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

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

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

我有一个输出:

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

说明:

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

现在我需要的是:

结果是,我需要将“ boy”代替“ GD13”,将“ Girl”代替“ LD31”(适用于所有值D33,D35,D37.D39) “”以“ G”开头,“ Cate”的“ girl”以“ L”开头],像这样:

    [{'boy': [{'Id': '47', 'Name_G': 'l'}], 'girl': [{'Id': '75', 'Name_L': 'g'}]}]

希望大家都明白这一点。有什么想法吗...

1 个答案:

答案 0 :(得分:1)

EmeraldCaro,这项工作还是您需要我将其修改为新表?

def getgates(hm): 
  s={} 
  for item in p:  
     if hm in item['Cate']:  
      if item['Cate'][0] == 'G':
       s['boy'] = [{"Id": item['Id'], "Name_" + item['Cate'][0]: item['Code']}] 
      elif item['Cate'][0] == 'L':
       s['girl'] = [{"Id": item['Id'], "Name_" + item['Cate'][0]: item['Code']}] 
  return s 


print(getgates('D31'))
{'boy': [{'Id': '47', 'Name_G': 'l'}], 'girl': [{'Id': '75', 'Name_L': 'g'}]}

print(getgates('D39'))
{'boy': [{'Id': '39', 'Name_G': 'h'}], 'girl': [{'Id': '11', 'Name_L': 'c'}]}