我有一個帶有物體的平面字典。每個物體都可以有一個父級。考慮到父值,我想遞回地構建每個物體。
邏輯:
- 每個物體都從其父物體繼承
is_mammal默認值(例如) - 每個物體都可以覆寫其父物體的默認值(例如
age) - 每個物體都可以添加新屬性(例如
hobby)
我正在努力完成它。感謝您的幫助,謝謝!
entities = {
'human': {
'is_mammal': True,
'age': None,
},
'man': {
'parent': 'human',
'gender': 'male',
},
'john': {
'parent': 'man',
'age': 20,
'hobby': 'football',
}
};
def get_character(key):
# ... recursive magic with entities ...
return entity
john = get_character('john')
print(john)
預期輸出:
{
'is_mammal': True, # inherited from human
'gender': 'male' # inherited from man
'parent': 'man',
'age': 20, # overwritten
'hobby': 'football', # added
}
uj5u.com熱心網友回復:
def get_character(entities, key):
try:
entity = get_character(entities, entities[key]['parent'])
except KeyError:
entity = {}
entity.update(entities[key])
return entity
uj5u.com熱心網友回復:
該解決方案使用遞回和 Python 怪癖,其中可變變數(這里是字典{})在函式呼叫之間共享。請參閱下面的討論,了解為什么這有點令人驚訝,盡管對于累積遞回結果很有用。
def get_character(d, key, entity = {}):
if d.get(key) is None:
return entity
return get_character(d, d.get(key).get('parent'), d.get(key) | entity)
get_character(entities, 'john')
{'is_mammal': True,
'age': 20,
'parent': 'man',
'gender': 'male',
'hobby': 'football'}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/532921.html
標籤:Python递归
上一篇:如何實時顯示API請求?
