繁体   English   中英

如果找到,从字典中获取特定键的最快方法

[英]Fastest way to get specific key from a dict if it is found

我目前正在编写一个从包含 JSON 的 API 读取的抓取工具。通过执行 response.json() 它将返回一个字典,我们可以在其中轻松使用 eg response["object"]来获取我们想要的值,正如我假设的那样将其转换为字典。 当前的模拟数据如下所示:

data = {
    'id': 336461,
    'thumbnail': '/images/product/123456?trim&h=80',
    'variants': None,
    'name': 'Testing',
    'data': {
        'Videoutgång': {
            'Typ av gränssnitt': {
                'name': 'Typ av gränssnitt',
                'value': 'PCI Test'
            }
        }
    },
    'stock': {
        'web': 0,
        'supplier': None,
        'displayCap': '50',
        '1': 0,
        'orders': {
            'CL': {
                'ordered': -10,
                'status': 1
            }
        }
    }
}

我要注意的是 API 有时确实包含“订单 -> CL”,但有时不包含。 这意味着快乐路径和不快乐路径都是我正在寻找的,这是从字典获取数据的最快方法。

我目前做了这样的事情:

data = {
    'id': 336461,
    'thumbnail': '/images/product/123456?trim&h=80',
    'variants': None,
    'name': 'Testing',
    'data': {
        'Videoutgång': {
            'Typ av gränssnitt': {
                'name': 'Typ av gränssnitt',
                'value': 'PCI Test'
            }
        }
    },
    'stock': {
        'web': 0,
        'supplier': None,
        'displayCap': '50',
        '1': 0,
        'orders': {
            'CL': {
                'ordered': -10,
                'status': 1
            }
        }
    }
}

if (
        "stock" in data
        and "orders" in data["stock"]
        and "CL" in data["stock"]["orders"]
        and "status" in data["stock"]["orders"]["CL"]
        and data["stock"]["orders"]["CL"]["status"]
):
    print(f'{data["stock"]["orders"]["CL"]["status"]}: {data["stock"]["orders"]["CL"]["ordered"]}')

1: -10

但是我的问题是,如果数据在字典中,我想知道从字典中获取数据的最快方法是什么?

我明白你的意思了。 对于这个问题,由于您的股票只有 4 个值,因此很难说.get()方法是否比使用循环更快。 如果你的字典有更多的项目,那么.get()肯定会工作得更快,但由于键很少,使用循环不会有太大区别。

在字典中查找更快,因为 Python 使用hash tables实现它们。 如果我们用Big O概念来解释差异, dictionaries的时间复杂度为常数O(1) 这也是使用.get()方法的另一种方法:

data = {
    'id': 336461,
    'thumbnail': '/images/product/123456?trim&h=80',
    'variants': None,
    'name': 'Testing',
    'data': {
        'Videoutgång': {
            'Typ av gränssnitt': {
                'name': 'Typ av gränssnitt',
                'value': 'PCI Test'
            }
        }
    },
    'stock': {
        'web': 0,
        'supplier': None,
        'displayCap': '50',
        '1': 0,
        'orders': {
            'CL': {
                'ordered': -10,
                'status': 1
            }
            
        }
    }
}
if (data.get('stock', {}).get('orders', {}).get('CL')):
    print(f'{data["stock"]["orders"]["CL"]["status"]}: {data["stock"]["orders"]["CL"]["ordered"]}')

是 Python 中关于查找的一篇很好的文章,以listdictionary为例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM