[英]Python List Comprehension - extracting from nested data
我是 Python 新手,试图提取一些嵌套数据。
这是两个产品的 JSON。 一个产品可以属于零个或多个类别
{
"Item":[
{
"ID":"170",
"InventoryID":"170",
"Categories":[
{
"Category":[
{
"CategoryID":"444",
"Priority":"0",
"CategoryName":"Paper Mache"
},
{
"CategoryID":"479",
"Priority":"0",
"CategoryName":"Paper Mache"
},
{
"CategoryID":"515",
"Priority":"0",
"CategoryName":"Paper Mache"
}
]
}
],
"Description":"Approximately 9cm wide x 4cm deep.",
"SKU":"111931"
},
{
"ID":"174",
"InventoryID":"174",
" Categories":[
{
"Category":{
"CategoryID":"888",
"Priority":"0",
"CategoryName":"Plaster"
}
}
],
"Description":"Plaster Mould - Australian Animals",
"SKU":"110546"
}
],
"CurrentTime":"2016-08-22 11:52:27",
"Ack":"Success"
}
我想确定产品属于哪个类别。
我的提取代码如下:-
for x in products:
productsInCategory = []
for y in x['Categories']:
for z in y['Category']:
if z['CategoryID'] == categories[i]['CategoryID']:
productsInCategory.append(x)
这个问题是,在这种情况下,第二项只包含一个类别,而不是一系列类别,所以这一行
for z in y['Category']:
循环遍历 Category 而不是 Category 数组的属性,因此导致我的代码失败。
我该如何防范? 用列表理解语法可以更优雅地编写它吗?
在这种情况下,这是一个非常糟糕的文档结构; 你不应该处理这个。 如果一个项目可以包含多个值,它应该始终是一个列表。
尽管如此,您仍然可以通过检查它是否是列表来在代码中处理它。
for x in products:
productsInCategory = []
for y in x['Categories']:
category = y['Category']
if isinstance(category, dict):
category = [category]
for z in category:
...
(您可能需要考虑使用更具描述性的变量名称; x
、 y
和z
对阅读代码的人不是很有帮助。)
我以前在 JSON 结构中经常遇到这个问题……经常到几周前我为它写了一个小库……
试试发电机,看看它是否能解决你的问题。 你应该能够简单:
for x in products:
if product_id_searching_for in list(nkr.find_nested_key_values(x, 'CategoryID')):
productsInCategory.append(x)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.