【发布时间】:2021-09-20 16:48:08
【问题描述】:
我一直试图弄清楚如何KISS 从字典中获取价值。
有多种场景如:
- 密钥不存在(应返回默认值 {}/[]/"")
- 键包含空列表的值(应该返回空列表)
- 如果我们试图获取一个值,例如
test['objects'][0]['productInfo'][0]['merchPrice']['promoExclusions'][0],如果它已经在productInfo失败,它应该立即返回默认值,而不是继续搜索下一个键
我最终做了这样的事情:
test = {
'pages': {
'prev': '',
},
'objects': [
{
'id': 'c362b8f3-1862-4e2d-ba06-d910e0d98e7e',
'productInfo': [
{
'merchProduct': {
'id': '63912b18-f00f-543f-a5c5-0c6236f63e79',
'snapshotId': '43cf801e-3689-42c2-ac85-d404e69aba42',
},
'merchPrice': {
'id': '7dd81061-d933-57f6-b233-2a6418ce487d',
'snapshotId': '268cc5af-8e04-4d64-b19b-02c2770b91fb',
'discounted': False,
#Could be | 'promoExclusions': ['TRUE'],
'promoExclusions': [],
'resourceType': 'merchPrice',
}
}
]
}
]
}
if test_print := test['objects'][0]['productInfo'][0]['merchPrice']['promoExclusions'][0]:
print(test_print)
然而,这会返回一个错误 IndexError: list index out of range,因为该列表不包含任何有意义的值,但我想知道在这种情况下如何为这个粒子问题设置一个默认值。
我的问题是: 如何在不使用大量资源的情况下尽可能简单高效地查找和获取 dict 的值,如果未找到则返回默认值?
【问题讨论】:
-
您那里好像有 JSON,您是否尝试过使用 JSON 解析器为您处理所有这些?
-
HI @RoadieRich 嗯.. 它肯定是 JSON,但也是一个字典,如果你这样做
print(type(test))将返回<class 'dict'>所以我相信它也是一个字典。但是我不确定 JSON 解析器会如何为我处理它? -
@RoadieRich 你在哪里看到 JSON?你是在说字典吗?
-
正常的解决方案是捕获
KeyError和IndexError(字典和列表)然后分配一个默认值。您不会知道问题在参考链中的哪个位置,但我不确定这对您的情况很重要。
标签: python python-3.x dictionary