[英]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 中关于查找的一篇很好的文章,以list
和dictionary
为例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.