在JSON(Python)中查找元素的最快方法

Her*_*Guy -7 python json

我有Json:

[
 {
  "name":"Apple",
  "price":2,
  "have":0,
  "max":36
 },
 {
  "name":"Pineapple",
  "price":5,
  "have":6,
  "max":17
 }
]
Run Code Online (Sandbox Code Playgroud)

我需要最快的功能,接收名称,并发送价格.例如,print(jsonname("Apple"))是2.

PS请不要发布循环答案,我知道它们.我需要快速的方法和方法的名称

Y2H*_*Y2H 16

这是一个简单的方法:

def function(json_object, name):
    for dict in json_object:
        if dict['name'] == name:
            return dict['price']
Run Code Online (Sandbox Code Playgroud)

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

def function(json_object, name):
        return [obj for obj in json_object if obj['name']==name][0]['price']
Run Code Online (Sandbox Code Playgroud)

  • @ Y2H你认真吗?使用第一种方法,如果json_object的第一个元素与name匹配,则立即返回。使用第二种方法,您仅在检查了json_object的每个元素之后才返回,这在大型列表中是很重要的。我自己进行了测试,最坏的情况(与“ json_object”中的最后一个元素匹配的搜索),循环的时间与理解的时间一样长。最好的情况是,搜索与第一个元素匹配,因此胜过了理解。再看看您的代码实际上是做什么的。 (5认同)
  • 列表推导式总是比 Python 中的 for 循环快。如果您愿意,可以阅读有关该主题的更多信息。 (2认同)

mar*_*ouf 6

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']
Run Code Online (Sandbox Code Playgroud)