我有一個由值陣列組成的字典,我想獲取與條件相關的所有值。這是結構的虛擬樣本:
d = {'condition': 'Approval expected.', 'sub_conditions': [
{'condition': 'Approved Activities: {reading} {crafting}', 'sub_conditions': [
{'condition': 'Field Areas: # of areas, dimensions - {start_date} {end_date} {email}', 'sub_conditions': [
{'condition': 'Room Areas: # of rooms, dimensions - {start_date} {end_date} {email}',
'sub_conditions': []}]}]}]}
subconditions 是由我想要獲得的條件組成的字典陣列。目前,我正在訪問每個條件值,如下所示:
for layer_one in d['sub_conditions']:
print(layer_one['condition'])
for layer_two in layer_one['sub_conditions']:
print(layer_two['condition'])
for layer_three in layer_two['sub_conditions']:
print(layer_three['condition'])
#it can have more layers
這給了我我需要的輸出:
Approved Activities: {reading} {crafting}
Field Areas: # of areas, dimensions - {start_date} {end_date} {email}
Room Areas: # of rooms, dimensions - {start_date} {end_date} {email}
我想知道更好的方法來迭代這種型別的字典。在這種情況下,最好的方法是什么?
uj5u.com熱心網友回復:
您可以為此使用遞回函式:
d = {'condition': 'Approval expected.', 'sub_conditions': [
{'condition': 'Approved Activities: {reading} {crafting}', 'sub_conditions': [
{'condition': 'Field Areas: # of areas, dimensions - {start_date} {end_date} {email}', 'sub_conditions': [
{'condition': 'Room Areas: # of rooms, dimensions - {start_date} {end_date} {email}',
'sub_conditions': []}]}]}]}
def print_conditions(my_dict: dict):
"""Print `condition` within each list of `sub_conditions`"""
for sub_condition in my_dict['sub_conditions']:
print(sub_condition['condition'])
print_conditions(sub_condition)
print_conditions(d)
輸出:
Approved Activities: {reading} {crafting}
Field Areas: # of areas, dimensions - {start_date} {end_date} {email}
Room Areas: # of rooms, dimensions - {start_date} {end_date} {email}
uj5u.com熱心網友回復:
每當您發現自己處于不確定嵌套結構可以達到多少級的情況時,請考慮遞回。
獲取您的代碼,并將其修改為遞回函式,我們在“父”字典上呼叫該函式,然后對內部存在的每個“內部”字典進行遞回。
def recurse(curr_dict):
if 'sub_conditions' in curr_dict:
for inner_dict in curr_dict['sub_conditions']:
print(inner_dict['condition'])
recurse(inner_dict)
d = {'condition': 'Approval expected.', 'sub_conditions': [
{'condition': 'Approved Activities: {reading} {crafting}', 'sub_conditions': [
{'condition': 'Field Areas: # of areas, dimensions - {start_date} {end_date} {email}', 'sub_conditions': [
{'condition': 'Room Areas: # of rooms, dimensions - {start_date} {end_date} {email}',
'sub_conditions': []}]}]}]}
recurse(d)
輸出與您的代碼所做的相同的事情,但現在您不必擔心添加更多回圈,無論字典嵌套了多少層,遞回代碼都應該可以作業。
Approved Activities: {reading} {crafting}
Field Areas: # of areas, dimensions - {start_date} {end_date} {email}
Room Areas: # of rooms, dimensions - {start_date} {end_date} {email}
uj5u.com熱心網友回復:
dict_of_conditions = d = {'condition': 'Approval expected.', 'sub_conditions': [
{'condition': 'Approved Activities: {reading} {crafting}', 'sub_conditions': [
{'condition': 'Field Areas: # of areas, dimensions - {start_date} {end_date} {email}', 'sub_conditions': [
{'condition': 'Room Areas: # of rooms, dimensions - {start_date} {end_date} {email}',
'sub_conditions': []}]}]}]}
conditions = []
def get_conditions(condition_dict):
print(condition_dict["condition"])
conditions.append(condition_dict["condition"])
if len(condition_dict["sub_conditions"]) > 0:
get_conditions(condition_dict["sub_conditions"][0]) # I am selecting the first item in the "sub_conditions" list because there seems to be only always one item in the array
這稱為遞回函式。基本上,它接受一個 dict,列印條件,如果 sub_conditions 陣列的長度大于 0,它會再次呼叫它自己。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/324838.html
