Python 按键类型分解json

Python 按键类型分解json,python,Python,我有以下json: { "Random.Int1": [50, 60, 1], "Random.Int2": [100, 200, 5], "Random.Int4": [30, 80, 10], "Items": { "tags": ["Random.Int5", "Random.Int6", "Random.Int7&q

我有以下json:

{
  "Random.Int1": [50, 60, 1],
  "Random.Int2": [100, 200, 5],
  "Random.Int4": [30, 80, 10],
  "Items": {
    "tags": ["Random.Int5", "Random.Int6", "Random.Int7"],
    "params": [10, 20, 5]
  }
}
我如何解构它以分离列表和dict数据,如:

list = [
    ["Random.Int1", [50, 60, 1]],
    ["Random.Int2", [100, 200, 5]],
    ["Random.Int4", [30, 80, 10]]
]

dict = {
    "Items": {
        "tags": ["Random.Int5", "Random.Int6", "Random.Int7"],
        "params": [10, 20, 5]
    }
}

您只需创建一个
dict
,分配“Items”值并从原始数据中删除即可。然后遍历数据的键/值对。它们以元组的形式出现,所以需要在运行时将它们转换为列表

data = {
  "Random.Int1": [50, 60, 1],
  "Random.Int2": [100, 200, 5],
  "Random.Int4": [30, 80, 10],
  "Items": {
    "tags": ["Random.Int5", "Random.Int6", "Random.Int7"],
    "params": [10, 20, 5]
  }
}

mydict = {"Items": data["Items"]}
del data["Items"]
mylist = list(list(item) for item in data.items())

print(mylist)
print(mydict)
你的问题是“按键类型”,但所有键都是
str
,所以我猜你的意思是“按值类型”

输出

[['Random.Int1', [50, 60, 1]], ['Random.Int2', [100, 200, 5]], ['Random.Int4', [30, 80, 10]]]
{'Items': {'tags': ['Random.Int5', 'Random.Int6', 'Random.Int7'], 'params': [10, 20, 5]}}

我推测,dict键的类型为int,当您称其为“Random.Intx”时,因此一种解决方案如下所示:

initial_dict: Dict[Union[int, Any], Union[List, Dict]] # to clarify typing



list_ = [
    [key, initial_dict[key]] for key in initial_dict \
    if isinstance(key, int)
]

dict_ = {
    key: initial_dict[key] for key in initial_dict \
    if not isinstance(key, int)
}



assert len(list_) + len(dict_) == len(initial_dict)

简而言之,您必须编写一个函数来实现这一点。您需要明确定义哪些标准控制列表结果中的结果,以及dict结果中的结果。旁注:不要在程序中使用
list
dict
作为名称-这样做会影响内置程序,并在以后给您带来问题。
initial_dict: Dict[Union[int, Any], Union[List, Dict]] # to clarify typing



list_ = [
    [key, initial_dict[key]] for key in initial_dict \
    if isinstance(key, int)
]

dict_ = {
    key: initial_dict[key] for key in initial_dict \
    if not isinstance(key, int)
}



assert len(list_) + len(dict_) == len(initial_dict)