如何创建具有不同嵌套级别且所有叶键具有相同值的嵌套 python 字典
How to create nested python dictionary that has varying levels of nesting and all leaf keys has the same value
我正在重构意大利面条代码,它有这样一段:
template_dict = {
"value": "",
"isIncreased": False,
"isDecreased": False
}
my_dict = {
"current_half_result": {
"home": template_dict,
"draw": template_dict,
"away": template_dict
},
"full_time_result": {
"home": template_dict,
"draw": template_dict,
"away": template_dict
},
"current_half_over_under": {
"_5": {
"over": template_dict,
"under": template_dict
},
"handicap": ""
},
"full_time_over_under": {
"_5": {
"over": template_dict,
"under": template_dict
},
"handicap": ""
},
"next_goal": {
"home": template_dict,
"no_goal": template_dict,
"away": template_dict
}
}
如您所见,my_dict 变量在所有叶键中具有相同的值 - template_dict。我怎样才能以一种代码不会比当前示例慢的方式从代码中删除重复,并且还可以提高代码的可读性和清洁度。速度是一个重要因素,因为这段代码在我的服务器中每秒运行 3-6 百次。而且我不会增加行数或创建额外的功能等。
P.S。我没有写那个代码,所以不要评判我。由于代码中的强耦合,我无法立即进行大的更改。有关完整代码,请查看 this link
这是我自己的解决方案。
def_dict = defaultdict(lambda: {"value": "", "isIncreased": False, "isDecreased": False})
my_dict = defaultdict(lambda: def_dict)
# PyCharm raises warning for two lines below, but it works
my_dict['current_half_over_under'] = defaultdict(lambda: def_dict)
my_dict['full_time_over_under'] = defaultdict(lambda: def_dict)
并且要在 "full_time_over_under"
和 "current_half_over_under"
词典中设置 "handicap"
键,我们应该通过 my_dict.setdefault('handicap', some_value)
访问它
我正在重构意大利面条代码,它有这样一段:
template_dict = {
"value": "",
"isIncreased": False,
"isDecreased": False
}
my_dict = {
"current_half_result": {
"home": template_dict,
"draw": template_dict,
"away": template_dict
},
"full_time_result": {
"home": template_dict,
"draw": template_dict,
"away": template_dict
},
"current_half_over_under": {
"_5": {
"over": template_dict,
"under": template_dict
},
"handicap": ""
},
"full_time_over_under": {
"_5": {
"over": template_dict,
"under": template_dict
},
"handicap": ""
},
"next_goal": {
"home": template_dict,
"no_goal": template_dict,
"away": template_dict
}
}
如您所见,my_dict 变量在所有叶键中具有相同的值 - template_dict。我怎样才能以一种代码不会比当前示例慢的方式从代码中删除重复,并且还可以提高代码的可读性和清洁度。速度是一个重要因素,因为这段代码在我的服务器中每秒运行 3-6 百次。而且我不会增加行数或创建额外的功能等。
P.S。我没有写那个代码,所以不要评判我。由于代码中的强耦合,我无法立即进行大的更改。有关完整代码,请查看 this link
这是我自己的解决方案。
def_dict = defaultdict(lambda: {"value": "", "isIncreased": False, "isDecreased": False})
my_dict = defaultdict(lambda: def_dict)
# PyCharm raises warning for two lines below, but it works
my_dict['current_half_over_under'] = defaultdict(lambda: def_dict)
my_dict['full_time_over_under'] = defaultdict(lambda: def_dict)
并且要在 "full_time_over_under"
和 "current_half_over_under"
词典中设置 "handicap"
键,我们应该通过 my_dict.setdefault('handicap', some_value)