我希望能夠使用單個點分隔的字串路徑設定嵌套字典項。例如,給定以下字典:
data_dictionary = {
"user_data": {
"first_name": "Some",
"last_name": "Guy",
"phone": "212-111-1234"
}
}
我希望能夠使用單個字串設定特定專案,如下所示:
data_dictionary['user_data.phone'] = '818-333-4567'
任何人都知道完成這樣的事情的圖書館或簡單的技術?
uj5u.com熱心網友回復:
你可以定義一個小輔助函式:
def set(obj, path, value):
*path, last = path.split(".")
for bit in path:
obj = obj.setdefault(bit, {})
obj[last] = value
set(data_dictionary, "user_data.phone", "123")
data_dictionary
# {'user_data': {'first_name': 'Some', 'last_name': 'Guy', 'phone': '123'}}
您還可以子類化dict和覆寫__setitem__:
class my_dict(dict):
def __setitem__(self, item, value):
if "." in item:
head, path = item.split(".", 1)
obj = self.setdefault(head, my_dict())
obj[path] = value
else:
super().__setitem__(item, value)
dd = my_dict({
"user_data": {
"first_name": "Some",
"last_name": "Guy",
"phone": "212-111-1234"
}
})
dd["user_data.phone"] = "123"
dd
# {'user_data': {'first_name': 'Some', 'last_name': 'Guy', 'phone': '123'}}
uj5u.com熱心網友回復:
我建議對嵌套結構更友好,例如Box
然后您可以使用dot符號來訪問任意數量的嵌套:
from box import Box
data = Box(data_dictionary)
data.user_data.phone = '818-333-4567'
print(data.user_data.phone)
818-333-4567
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/316009.html
上一篇:Kotlin地圖型別推斷失敗
