python - 在python中加载json的一部分

标签 python

我有一个包含大约 1000 个数据条目的 json 文件。例如

{"1":"Action","2":"Adventure",....."1000":"Mystery"}

以上只是一个例子。

我通过导入 json 来使用 json.load 功能。 如何仅加载 json.json 中的前 10 个数据条目?

{"1":"Action","2":"Adventure",....."10":"Thriller"}

最佳答案

JSON 对象与 Python 字典一样,没有顺序。您也无法控制加载多少对象,而不是使用标准库 json无论如何模块。

加载后,可以取出键值最小的十个键值对:

import heapq
import json

data = json.loads(json_string)
limited = {k: data[k] for k in heapq.nsmallest(data, 10, key=int)}

heapq.nsmallest() 无论 data 的大小如何,都会有效地选出 10 个最小的键。 .

当然,如果键始终连续并且始终1 开始,您也可以使用range()这里:

data = json.loads(json_string)
limited = {str(k): data[str(k)] for k in range(1, 11)}

如果您想按文件定义顺序捕获对象,您可以使用 object_pairs_hook json.load() 的参数和json.loads() :

class FirstTenDict(dict):
    def __init__(self, pairs):
        super(FirstTenDict, self).__init__(pairs[:10])

data = json.loads(json_string, object_pairs_hook=FirstTenDict)

后一种方法的演示:

>>> import json
>>> class FirstTenDict(dict):
...     def __init__(self, pairs):
...         super(FirstTenDict, self).__init__(pairs[:10])
... 
>>> json_data = '''\
... {"foo42": "bar", "foo31": "baz", "foo10": "spam", "foo44": "ham", "foo1": "eggs",
...  "foo24": "vikings", "foo21": "monty", "foo88": "python", "foo11": "eric", "foo65": "idle",
...  "foo13": "will", "foo31": "be", "foo76": "ignored"}
... '''
>>> json.loads(json_data)
{'foo1': 'eggs', 'foo88': 'python', 'foo44': 'ham', 'foo10': 'spam', 'foo76': 'ignored', 'foo42': 'bar', 'foo24': 'vikings', 'foo11': 'eric', 'foo31': 'be', 'foo13': 'will', 'foo21': 'monty', 'foo65': 'idle'}
>>> json.loads(json_data, object_pairs_hook=FirstTenDict)
{'foo1': 'eggs', 'foo88': 'python', 'foo44': 'ham', 'foo10': 'spam', 'foo24': 'vikings', 'foo11': 'eric', 'foo21': 'monty', 'foo42': 'bar', 'foo31': 'baz', 'foo65': 'idle'}
>>> import pprint
>>> pprint.pprint(_)
{'foo1': 'eggs',
 'foo10': 'spam',
 'foo11': 'eric',
 'foo21': 'monty',
 'foo24': 'vikings',
 'foo31': 'baz',
 'foo42': 'bar',
 'foo44': 'ham',
 'foo65': 'idle',
 'foo88': 'python'}

关于python - 在python中加载json的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32661646/

相关文章:

python - 迭代多维数组并跟踪/执行迭代索引操作的最佳方法是什么

python - 使用类名在Python中设置描述符属性的值

python - App Engine (Python) 数据存储预调用 API Hook

python - 如何从Python集合中有效地循环正则表达式搜索

Python:如何获取匹配之间的字符串?

python - Jython-在函数调用语法中使用变量

python - 检查变量的 Python SQL 查询结果

python - 在 Python 中创建类的 'grid' 实例

python Qt : main widget scroll bar

python - Matplotlib 动画无法正确保存