我有这样的json数据:
{
"children": [{
"objName": "Sprite1",
"scripts": [[89, 68, [["whenGreenFlag"], ["doForever", [["doIf", ["keyPressed:", "space"], [["wait:elapsed:from:", 0.5], ["playSound:", "meow"]]],
["doIf", ["mousePressed"], [["playDrum", 1, 0.25]]]]]]]],
"sounds": [{
"soundName": "meow",
"soundID": 0,
"md5": "83c36d806dc92327b9e7049a565c6bff.wav",
"sampleCount": 18688,
"rate": 22050,
"format": ""
}],
}
}
我想计算“脚本”下“keyPressed”的出现次数。但我不知道如何在“脚本”下遍历列表列表....
这是我的代码:
import simplejson as json
with open("D:\\1.SnD\Work\PyCharmProjects\project.json", 'rb') as f:
json_data = json.loads(str(f.read(), 'utf-8'))
key_presses = []
for child in json_data.get('children'):
for script in child.get('scripts'):
for mouse in script.get("keyPressed"): // Does not work
print(mouse)
我想将keyPressed的计数存储在key_presses列表中。
答案 0 :(得分:1)
从What is the fastest way to flatten arbitrarily nested lists in Python?借用优秀的flatten
方法并将其与集合中的Counter
相结合,您得到:
import collections, json
def flatten(container):
for i in container:
if isinstance(i, list) or isinstance(i, tuple):
for j in flatten(i):
yield j
else:
yield i
with open("D:\\1.SnD\Work\PyCharmProjects\project.json", 'rb') as f:
json_data = json.loads(str(f.read(), 'utf-8'))
print(collections.Counter(
flatten(json_data['children'][0]['scripts']))['keyPressed:'])
如果您运行上述内容,则输出将是脚本中keyPressed:
出现的次数。