在 JSON (Python) 中查找元素的最快方法 [重复]

Posted

技术标签:

【中文标题】在 JSON (Python) 中查找元素的最快方法 [重复]【英文标题】:The Fastest method to find element in JSON (Python) [duplicate] 【发布时间】:2018-01-06 22:03:46 【问题描述】:

我有 Json:

[
 
  "name":"Apple",
  "price":2,
  "have":0,
  "max":36
 ,
 
  "name":"Pineapple",
  "price":5,
  "have":6,
  "max":17
 
]

我需要最快的函数,即接收名称并发送价格。例如 print(jsonname("Apple")) 是 2。

附:请不要发布循环答案,我知道。我需要快速方法和方法名称

【问题讨论】:

到目前为止你做了什么?请发布您的代码。 不,方法。我知道很慢。所以我需要最快的方法 @NurislomTuraev 看起来你什么都没尝试 @NurislomTuraev 与他人相对应。每个人都在努力帮助你,但你必须表现出你所做的一些努力。 SO 不是代码编写服务。在你提问之前尝试谷歌搜索,最后但并非最不重要的是总是发布你的代码 @ArpitSolanki 我没有找到任何关于解析 json 的速度。所以我想在这里问一下。你对此有异议吗? 【参考方案1】:

这是一个简单的方法:

def function(json_object, name):
    for dict in json_object:
        if dict['name'] == name:
            return dict['price']

如果您确定没有重复的名称,那么更有效(和 pythonic)的方法是使用列表推导:

def function(json_object, name):
        return [obj for obj in json_object if obj['name']==name][0]['price']

【讨论】:

列表推导总是比 Python 中的 for 循环快。如果您愿意,可以阅读有关该主题的更多信息。 @Y2H 列表推导总是干净、快速和一条线。好答案 -1,列表推导不会自动使其更 Python 或更快,尤其是当您滥用它们时。在您的循环示例中,一旦找到匹配的值,您就会返回,而在列表理解中,您不仅会在返回之前创建一个额外的不必要的列表,而且更糟糕的是,您必须在丢弃整个列表之前评估整个列表并选择第一场比赛。 @Y2H 你是认真的吗?使用第一种方法,如果json_object 的第一个元素匹配name,则立即返回。使用第二种方法,只有在检查json_object 的每个元素后才返回,这在大型列表中很重要。我自己测试了它,最坏的情况(搜索匹配json_object 中的最后一个元素),循环花费的时间与理解一样长。最好的情况,搜索匹配第一个元素,优于理解......显着。再看看你的代码实际上做了什么。【参考方案2】:
from json import loads

json = """[
 
  "name":"Apple",
  "price":2,
  "have":0,
  "max":36
 ,
 
  "name":"Pineapple",
  "price":5,
  "have":6,
  "max":17
 
]"""

parsedJson = loads (json)

def jsonname (name):
    for entry in parsedJson:
        if name == entry ['name']:
            return entry ['price']

【讨论】:

以上是关于在 JSON (Python) 中查找元素的最快方法 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

查找数组的所有元素是不是不同的最快方法?

在 python 中查找特征值/向量的最快方法是啥?

使用 mptt 在 Python / Django 中创建 JSON 以反映树结构的最快方法

查找作为列表存在的列元素的数据框索引的最快方法

查找一维数组的不同元素数量的最快和最有效的方法

在python中搜索列表的最快方法