Gat*_*ndo 4 python dictionary path
我希望能够使用单个点分隔的字符串路径设置嵌套字典项。例如,给定以下字典:
data_dictionary = {
"user_data": {
"first_name": "Some",
"last_name": "Guy",
"phone": "212-111-1234"
}
}
Run Code Online (Sandbox Code Playgroud)
我希望能够使用单个字符串设置特定项目,如下所示:
data_dictionary['user_data.phone'] = '818-333-4567'
Run Code Online (Sandbox Code Playgroud)
有人知道完成类似事情的库或简单技术吗?
您可以定义一个小辅助函数:
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'}}
Run Code Online (Sandbox Code Playgroud)
您还可以子类化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'}}
Run Code Online (Sandbox Code Playgroud)