在 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) 中查找元素的最快方法 [重复]的主要内容,如果未能解决你的问题,请参考以下文章