我有一個混合了串列和字典的示例物件:
{
"field_1" : "aaa",
"field_2": [
{
"field_3" : "bbb",
.....
"field_4" : "ccc",
"field_need_to_filter" : False,
},
{
"field_5" : "ddd",
.....
"field_6": [
{
"field_7" : "eee",
....
"field_8" : [
{
"field_9": "fff",
.....
"field_10": {
"field_11": "rrr",
...
"field_12": [
{
"field_13": "xxx",
...
"field_need_to_filter": True,
},
{
"field_13": "yyy",
...
"field_need_to_filter": True,
},
{
"field_13": "zzz",
...
"field_need_to_filter": False,
}
]
}
},
]}]}
]
}
我想迭代它并為field_13where field_need_to_filteris添加所有相應的值True,所以對于這個例子,預期的輸出是:
["xxx", "yyy"]
uj5u.com熱心網友回復:
嘗試遞回:
dct = {
"field_1": "aaa",
"field_2": [
{
"field_3": "bbb",
"field_4": "ccc",
"field_need_to_filter": False,
},
{
"field_5": "ddd",
"field_6": [
{
"field_7": "eee",
"field_8": [
{
"field_9": "fff",
"field_10": {
"field_11": "rrr",
"field_12": [
{
"field_13": "xxx",
"field_need_to_filter": True,
},
{
"field_13": "yyy",
"field_need_to_filter": True,
},
{
"field_13": "zzz",
"field_need_to_filter": False,
},
],
},
},
],
}
],
},
],
}
def find(o, key):
if isinstance(o, dict):
if key in o and o.get("field_need_to_filter"):
yield o[key]
for v in o.values():
yield from find(v, key)
elif isinstance(o, list):
for v in o:
yield from find(v, key)
out = list(find(dct, "field_13"))
print(out)
印刷:
['xxx', 'yyy']
uj5u.com熱心網友回復:
看起來一個簡單的遞回函式應該在這里解決問題,見下文。
定義資料:
data = {
"field_1" : "aaa",
"field_2": [
{
"field_3" : "bbb",
"field_4" : "ccc",
"field_need_to_filter" : False,
},
{
"field_5" : "ddd",
"field_6": [
{
"field_7" : "eee",
"field_8" : [
{
"field_9": "fff",
"field_10": {
"field_11": "rrr",
"field_12": [
{
"field_13": "xxx",
"field_need_to_filter": True,
},
{
"field_13": "yyy",
"field_need_to_filter": True,
},
{
"field_13": "zzz",
"field_need_to_filter": False,
}
]
}
},
]}]}
]
}
過濾資料:
def FilterData():
results = []
def Filter(data):
if isinstance(data, list):
for item in data:
Filter(item)
elif isinstance(data, dict):
if data.get('field_need_to_filter'):
results.append(data.get('field_13'))
Filter(list(data.values()))
Filter(data)
return results
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/526860.html
下一篇:將字典項交叉參考到資料框中的值
