Python 按键类型分解json
我有以下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
{
"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)