我有一個混合了串列和字典的示例物件:
{
"field_1" : "aaa",
"field_2": [
{
"name" : "bbb",
.....
"field_4" : "ccc",
"field_need_to_filter" : False,
},
{
"name" : "ddd",
.....
"details": [
{
"name" : "eee",
....
"details" : [
{
"name": "fff",
.....
"field_10": {
"field_11": "rrr",
...
"details": [
{
"name": "xxx",
...
"field_need_to_filter": True,
},
{
"name": "yyy",
...
"field_need_to_filter": True,
},
{
"field_13": "zzz",
...
"field_need_to_filter": False,
}
]
}
},
]}]}
]
}
我想迭代這個字典并為namewhere field_need_to_filteris添加所有相應的欄位True,所以對于這個例子,預期的輸出是:
["ddd.eee.fff.xxx", "ddd.eee.fff.yyy"]。我已經看這個太久了,我的大腦現在停止作業,任何幫助將不勝感激。謝謝。
uj5u.com熱心網友回復:
好的,我花了一些時間來考慮不同的情況并修復錯誤,但這有效(至少在您的 dict 示例中);請注意,它假定包含 "field_need_to_filter": True 的字典是端點(該函式不會深入研究這些))。如果您需要,我很樂意為代碼添加解釋。
mydict = {
"field_1" : "aaa",
"field_2": [
{
"name" : "bbb",
"field_4" : "ccc",
"field_need_to_filter" : False,
},
{
"name" : "ddd",
"details": [
{
"name" : "eee",
"details" : [
{
"name": "fff",
"field_10": {
"field_11": "rrr",
"details": [
{
"name": "xxx",
"field_need_to_filter": True,
},
{
"name": "yyy",
"field_need_to_filter": True,
},
{
"field_13": "zzz",
"field_need_to_filter": False,
}
]
}
},
]}]}
]
}
def filter_paths(thing, path=''):
if type(thing) == dict:
# if this dict has a name, log it
if thing.get("name"):
path = ('.' if path else '') thing["name"]
# if this dict has "...filter": True, we've reached an end point, and return the path
if thing.get("field_need_to_filter") and thing["field_need_to_filter"]:
return [path]
# else we delve deeper
result = []
for key in thing:
result = [deep_path for deep_path in filter_paths(thing[key], path)]
return result
# if the current object is a list, we simply delve deeper
elif type(thing) == list:
result = []
for element in thing:
result = [deep_path for deep_path in filter_paths(element, path)]
return result
# We've reached a dead-end, so we return an empty list
else:
return []
filter_paths(mydict)
# Out[204]: ['ddd.eee.fff.xxx', 'ddd.eee.fff.yyy']
uj5u.com熱心網友回復:
如果這是您的正確代碼,則在檢查 ddd 的欄位名稱后呼叫 iterate_fun 而不是 iterate_func
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/528195.html
下一篇:如何使用csv檔案創建嵌套字典
