解析json而没有explciitely调用键名

时间:2016-04-22 01:59:07

标签: python json parsing dictionary key

我有一个类似json的文件,每行有效json,看起来像

{"Some_key": {"name": "Tom", "school_code":"5678", "sport": "football", "score":"3.46", "classId": "456"}}
{"Another_one": {"name": "Helen", "school_code":"7657", "sport": ["swimming", "score":"9.8", "classId": "865"}}
{"Yet_another_one_": {"name": "Mikle", "school_code":"7655", "sport": "tennis", "score":"5.7", "classId": "76532"}}

所以我需要通过提取这些第一个键(即“Some_Key”,“Another_key”)来创建字典(?不是真的需要字典格式,而是任何可以帮助我将键与值,两个元素的数组相关联)的东西。等),我事先不知道,然后将它们与词典中的得分键值相关联。所以像:

("Some_key":"3.46", "Another_Key":"9.8", "Yet_another_one_"; "5.7")

我不知道在没有明确调用键名的情况下提取内容的方法,所以非常欢迎您的想法!

2 个答案:

答案 0 :(得分:5)

这适用于Python2和Python3

>>> {k: v.get('score') for item in data for k, v in item.items()}
{'Another_one': '9.8', 'Some_key': '3.46', 'Yet_another_one_': '5.7'}

答案 1 :(得分:1)

如果类似json的文件在每一行上确实都有有效的json(你的例子并不完全),你可以做类似下面的事情(在Python 2或3中):

import json

with open('json-like.txt') as data_file:
    objs = (json.loads(line).popitem() for line in data_file)
    data = {key: value['score'] for key, value in objs}

print(data) # -> {'Yet_another_one_': '5.7', 'Another_one': '9.8', 'Some_key': '3.46'}