如果字典列表中的键相同,则合并嵌套的JSON

2024-09-28 20:42:37 发布

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

如果列表中的其他键相同,如何在value_map下添加新的时间戳作为嵌套的json? 下面是dicts的示例列表。你知道吗

dicts = [{
    "key": "v3_CA125_2019-09-19",
    "sn": "M9257",
    "value_map": {
      "06:59:59": {
        "V_615": "1",
        "V_616": "2",
      }
    }
  },
  {
    "key": "v3_CA125_2019-09-19",
    "sn": "M9257",
    "value_map": {
      "10:59:59": {
        "V_613": "30",
        "V_614": "22"
      }
    }
  },
  {
    "key": "v3_CA125_2019-09-23",
    "sn": "M9257",
    "value_map": {
      "12:59:59": {
        "V_615": "33"
      }
    }
  },
  {
    "key": "v3_CA125_2019-09-23",
    "sn": "M9257",
    "value_map": {
      "09:59:59": {
        "V_602": "0.208984375"
      }
    }
  }
]

我试图得到如下输出:

dicts = [{
    "key": "v3_CA125_2019-09-19",
    "sn": "M9257",
    "value_map": {
      "06:59:59": {
        "V_615": "1",
        "V_616": "2",
      },
      "10:59:59": {
        "V_613": "30",
        "V_614": "22"
      }
    }
  },
  {
    "key": "v3_CA125_2019-09-23",
    "sn": "M9257",
    "value_map": {
      "12:59:59": {
        "V_615": "33"
      },
      "09:59:59": {
        "V_602": "0.208984375"
      }
    }
  }
]

我试图在value_map后面加上OrderedDict,但到目前为止还没有找到某样东西。有什么建议吗?你知道吗

from collections import OrderedDict
d = OrderedDict()
for l in dicts :
    d.setdefault((l['partition_key'], l['sort_key'], l['sn']), set()).add(l['value_map'])

result = [{'partition_key': k[0], 'sort_key': k[1], 'sn':k[2], 'value_map': v.pop() if len(v) == 1 else v} for k, v in d.items()] 

Tags: keyinmap列表forvalue时间v3
3条回答
key_to_index_map ={} # to know when we saw the object with a given key
desired_list = []
for elem in dicts:
  key = elem['key']
  # append if you see another object with same key
  if key in key_to_index_map:
    value_map = desired_list[key_to_index_map[key]]["value_map"]
    value_map.update(elem['value_map']);
    desired_list[key_to_index_map[key]]['value_map'] = value_map;
  else: # or simply add to the final list
    desired_list.append(elem);
    key_to_index_map[key] = len(desired_list)-1;

值映射属性必须是数组[],而不是dict {}

当你需要一本字典时,你可以把值映射成一个列表。你知道吗

相关问题 更多 >