我希望检查出现的总数“ id”(在这种情况下为12个“ id”),然后创建一个空列表,以按照“ item_id”的顺序附加“ item_task”。
示例:1:播放,2:给予,3:给予,4:检查......... 12:很好(已完成)
由于没有列出编号6的“ item_id”,因此我想为其分配一个空列表。 “ item_id” ---> 6:[] ....我希望它自动检查json中不包含哪些“ item_id”。在此示例中,我给出6,但有时5或12不在其中。有办法吗?
下面是我的json文件。
json =
[ {
"testing" : [ {
"example" : {
},
"get" : [ {
"id" : "0",
"item" : [ {
"get_id" : "1",
"item_task" : "play"
} ]
}, {
"id" : "1",
"item" : [ ],
} ]
}, {
"example" : {
},
"get" : [ {
"id" : "2",
"item" : [ ],
} ]
}, {
"example" : {
} ]
},
"get" : [ {
"id" : "3",
"item" : [ {
"item_id" : "2",
"item_task" : "give"
} ],
} ]
}, {
"example" : {
},
"get" : [ {
"id" : "4",
"item" : [ {
"item_id" : "5",
"item_task" : "play"
} ],
}, {
"id" : "5"
} ]
}, {
"example" : {
},
"get" : [ {
"id" : "6",
"item" : [ {
"item_id" : "0",
"item_task" : "let"
}, {
"item_id" : "3",
"item_task" : "give"
}, {
"item_id" : "4",
"item_task" : "check"
}, {
"item_id" : "7",
"item_task" : "nice"
}, {
"item_id" : "8",
"item_task" : "nice"
}, {
"item_id" : "9",
"item_task" : "do"
} ]
}, {
"id" : "7",
}, {
"id" : "8",
}, {
"id" : "9"
} ]
}, {
"example" : {
},
"get" : [ {
"id" : "10",
"item" : [ {
"item_id" : "11",
"item_task" : "nice"
}, {
"item_id" : "12",
"item_task" : "nice"
} ]
}, {
"id" : "11",
}, {
"id" : "12"
} ]
} ]
} ]
我对(1)的代码计算'id'的数量。 (2)找到'id'和'item_id'之间的区别(3)向不在json文件中的'item_id'添加一个空列表。
count = 0
for test in u[0]['testing']:
for value in test["get"]:
if "id" in valu:
count += 1
value = []
for test in u[0]["testing"]:
for value in test["get"]:
if 'item' in value:
for u in value["item"]:
for i in range(count):
if str(i) not in u["item_id"]:
print(str(i))
但是我没有得到json文件中没有的'item_id'。你能帮我吗
答案 0 :(得分:1)
您还没走那么远,但是我不得不修复您的初始u
,因为它包含语法错误和一个"get_id"
键,该键当然应该显示为"item_id"
。
应该怎么做?
在两个循环中,您应始终将项目添加到适当的容器中:ID列表和item_tasks字典。并且,请切勿重复使用变量名!
for u in value["item"]:
完全是错误的,因为它会覆盖名为... u
的主结构。
代码可能是:
count = 0
ids = []
for test in u[0]['testing']:
for value in test["get"]:
if "id" in value:
ids.append(value["id"])
count += 1
task = {}
del tasks
for test in u[0]["testing"]:
for value in test["get"]:
if 'item' in value:
for x in value["item"]:
if x['item_id'] in ids:
task[x['item_id']] = x['item_task']
好吧,您分别拥有ID和任务。然后,您可以使用以下命令构建有序的字典:
import collections
resul = collections.OrderedDict()
for i in ids:
resul[i] = task.get(i, [])
print(resul)
OrderedDict([('0', 'let'), ('1', 'play'), ('2', 'give'), ('3', 'give'), ('4', 'check'), ('5', 'play'), ('6', []), ('7', 'nice'), ('8', 'nice'), ('9', 'do'), ('10', []), ('11', 'nice'), ('12', 'nice')])
因为没有为6和10分配任务。