gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:50:06 25 4
gpt4 key购买 nike

我有一个包含大约 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com