首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python中的键对JSON对象进行分组

使用python中的键对JSON对象进行分组
EN

Stack Overflow用户
提问于 2018-10-16 04:34:31
回答 1查看 1.5K关注 0票数 1

我有如下所示的JSON数据,

代码语言:javascript
复制
{
  "BLE:ble_type1": "xx",
  "BLE:ble_mac1": "yy",
  "BLE:ble_type2": "aa",
  "BLE:ble_mac2": "bb"
}

预期的产出是,

代码语言:javascript
复制
"BLE":[  
        {  
          "ble_type1":"xx",
          "ble_mac1":"yy"
        },
        {  
          "ble_type2":"aa",
          "ble_mac2":"bb"
        }
      ]

有人能帮助我使用python获得所需的输出吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-17 00:35:37

这里是一个起点,为给出的例子工作。可能需要根据其他JSON输入数据进行调整:

代码语言:javascript
复制
from collections import OrderedDict

d = {
  "BLE:ble_type1": "xx",
  "BLE:ble_mac1": "yy",
  "BLE:ble_type2": "aa",
  "BLE:ble_mac2": "bb"
}

od = OrderedDict(d.items())

mainkey = set([k.split(':')[0] for k in list(d.keys())]).pop()

keys = [k.split(':')[1] for k in od.keys()]
values = list(od.values())
print(keys)
data = []

count = int(keys[0][-1])

d = {}

for k, v in zip(keys, values):
  n = int(k[-1])

  if n == count:
    d[k] = v

  else:
    d = {}
    count += 1 
    if n == count:
      d[k] = v

  if d not in data:
    data.append(d)

new_d = {mainkey: data}    

现在您有了一个新的dict,它包含所需的输出:

代码语言:javascript
复制
>>> print(new_d)

{'BLE': [{'ble_type1': 'xx', 'ble_mac1': 'yy'}, {'ble_type2': 'aa', 'ble_mac2': 'bb'}]}

我们可以验证这与所需的输出匹配:

代码语言:javascript
复制
>>> desired = [  
        {  
          "ble_type1":"xx",
          "ble_mac1":"yy"
        },
        {  
          "ble_type2":"aa",
          "ble_mac2":"bb"
        }
      ]

>>> print(new_d['BLE'] == desired)
True

希望这能有所帮助。如果这不是你想要的,请留下评论,并努力改进。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52827992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档