我有一個如下的字典,我想寫一個遞回函式來回傳所有的產品:
我有一個如下的字典,我想寫一個遞回函式來回傳所有的產品。
category = {'name': 'electronic_devices',
'sub_categories': [
{
'name': 'mobile-phone',
'sub_categories': [],
'products': [].
'Sony xperia 1': [].
'Samsung Galaxy A32'。
'Apple iphone 12',
'Xiaomi redmi 9'.
]
},
{
'name': 'laptop',
'sub_categories': [
{
'name': 'ultrabook',
'sub_categories': [],
'products': [] 。
'Asus ROG strix',
'Microsoft surface book 3',
'Lenovo ideapad 3'.
]
}
],
'產品': [
'Dell inspiron 3583-5278',
'HP pavilion dk1056wm'.
]
}
],
' products': []
}
我的函式是:
def get_product(dic)。
for k, v in dic.items()。
if k == 'sub_categories':
return get_product(k)
elif k == 'products':
return v
print(get_product(category))
這個函式最后出現了錯誤。 誰能幫我找到問題所在?
uj5u.com熱心網友回復:
你必須這樣迭代:
def get_product(dic)。
x = []
for k, v in dic.items()。
if k == 'sub_categories':
for i in v:
x.extend(get_product(i))
elif k == 'products':
x.extend(v)
return x
print(get_product(category))
輸出:
['Sony xperia 1Samsung Galaxy A32', 'Apple iphone 12', '小米紅米9'。'華碩ROG strix', '微軟sface book 3', '聯想ideapad 3', 'Dell inspiron 3583-5278', 'HP pavilion dk1056wm']
uj5u.com熱心網友回復:
一個不使用遞回的解決方案。你可以直接使用一個佇列來達到這個目的。無論你的資料是如何嵌套的,這也是可行的。
category = {
'name': 'electronic_devices',
'sub_categories': [
{
'name': 'mobile-phone',
'sub_categories': [],
'products': [].
'Sony xperia 1',
'Samsung Galaxy A32',
'Apple iphone 12',
'Xiaomi redmi 9'.
]
},
{
'name': 'laptop',
'sub_categories': [
{
'name': 'ultrabook',
'sub_categories': [
{
'產品': [
'激光劍',
'Beyblade'。
'Crush Gear'.
]
}
],
'產品': [
'Asus ROG strix',
'Microsoft surface book 3',
'Lenovo ideapad 3'.
]
}
],
'產品': [
'Dell inspiron 3583-5278',
'HP pavilion dk1056wm'.
]
}
],
'products': ["Solar System Destructor Beta-3A"].
}
def get_products(dic)。
產品 = []
queue = [dic]
while queue:
data = queue.pop()
if isinstance(data, dict)。
products.extend(data.get('products', [] ))
queue.extend(data.values())
elif isinstance(data, list)。
queue.extend(data)
return products
print(get_products(category))
輸出
['Solar System Destructor Beta-3A', 'Dell inspiron 3583-5278', 'HP pavilion dk1056wm', '華碩ROG strix', 'Microsoft surface book 3', 'Lenovo ideapad 3', '激光劍', 'Beyblade', 'Crush Gear', 'Sony xperia 1', 'Samsung Galaxy A32', 'Apple iphone 12', '小米Redmi 9']
uj5u.com熱心網友回復:
你不應該通過遍歷鍵值對和匹配鍵來訪問字典的值,因為這樣做效率低下,而且不必要地冗長。應該直接通過鍵來訪問字典的值:
def get_product(d) 。
return [p for s in d['sub_categories'] for p in get_product(s) ] d['products']
因此,get_product(category)回傳:
['Sony xperia 1Samsung Galaxy A32', 'Apple iphone 12', ' Xiaomi redmi 9', '華碩ROG strix', '微軟sface book 3', '聯想ideapad 3', 'Dell inspiron 3583-5278', 'HP pavilion dk1056wm']
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/319341.html
標籤:
下一篇:在一行中初始化和變異陣列
