有人可以幫助我使用下面的代碼嗎?
這最初是為了處理 json 檔案中的資料,但我已將其轉換為使用 json / 字典變數。
現在 get_data_value() 函式正在作業,但不僅僅是回傳值,我想回傳一個包含鍵和值的單數字典。
我只是不確定如何在不破壞遞回的情況下轉換 item_generator 函式以使其成為可能;我從stackoverflow上的一個例子中找到了這個函式。
def get_data_value(data,data_name):
d = data['test']
print(item_generator(d,data_name))
for _ in item_generator(d,data_name):
return (_)
def item_generator(json_input, lookup_key):
if isinstance(json_input, dict):
for key, value in json_input.items():
if key == lookup_key:
data_single_item = {key:value} # what i want to return
print(data_single_item)
yield value # only value is returned
else:
yield from item_generator(value, lookup_key)
elif isinstance(json_input, list):
for item in json_input:
yield from item_generator(item, lookup_key)
json_data = { "test": [ { "Tier1": [ { "Tier1-Main-Title-1": [ { "title": "main", "example": 400 } ] } ] }, { "Tier2": [] }, { "Tier3": [ { "Example1-Sub1": 44 } ] } ] }
print(get_data_value(json_data,'title'))
uj5u.com熱心網友回復:
值得指出的是,您在這里有一個錯誤:
for _ in item_generator(d,data_name):
return (_)
這是一個需要注意的重要情況,因為return這里的陳述句只回傳一次。因此,這個for回圈只在第一次迭代時運行,并且只回傳第一個yield結果——即只在json_data.
您可以使用生成器(或可迭代)解包到 a 中來修復它list,如下所示:
def get_data_value(data, data_name):
d = data['test']
return [*item_generator(d, data_name)]
def item_generator(json_input, lookup_key):
if isinstance(json_input, dict):
if lookup_key in json_input:
yield {lookup_key: json_input[lookup_key]}
else:
for v in json_input.values():
yield from item_generator(v, lookup_key)
elif isinstance(json_input, list):
for item in json_input:
yield from item_generator(item, lookup_key)
json_data = {"test": [{"Tier1": [{"Tier1-Main-Title-1": [{"title": "main", "example": 400}]}]}, {"Tier2": []},
{"Tier3": [{"Example1-Sub1": 44, "title": "TEST2"}]}]}
print(get_data_value(json_data, 'title'))
結果:
[{'title': 'main'}, {'title': 'TEST2'}]
或者,如果您根本不想打電話get_data_value:
print(*item_generator(json_data['test'], 'title'))
'test'由于函式本質上是遞回的,傳遞密鑰是可選的。
默認情況下,結果由單個空格分隔,但您可以通過將sep引數傳遞給列印陳述句來控制分隔符。
{'title': 'main'} {'title': 'TEST2'}
uj5u.com熱心網友回復:
我不確定我是否遺漏了什么,但你為什么不直接回傳你想要的東西?像這樣例如:
def get_data_value(data,data_name):
d = data['test']
print(item_generator(d,data_name))
for _ in item_generator(d,data_name):
return (_)
def item_generator(json_input, lookup_key):
if isinstance(json_input, dict):
for key, value in json_input.items():
if key == lookup_key:
yield {key:value}
else:
yield from item_generator(value, lookup_key)
elif isinstance(json_input, list):
for item in json_input:
yield from item_generator(item, lookup_key)
json_data = { "test": [ { "Tier1": [ { "Tier1-Main-Title-1": [ { "title": "main", "example": 400 } ] } ] }, { "Tier2": [] }, { "Tier3": [ { "Example1-Sub1": 44 } ] } ] }
print(get_data_value(json_data,'title'))
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/344882.html
上一篇:我需要將此頭遞回函式轉換為尾遞回
下一篇:應用記憶化使golom序列變慢
