如何编写函数向嵌套dict中添加新dict并自动生成递增整数key
方案1:基于字典长度实现(无删除操作时最优)
原理是当前父字典的长度刚好等于下一个要分配的递增key(初始为空时长度为0,添加第一个元素分配key=0后长度变为1,下一个新增key自动为1,以此类推)。
def add_child(parent: dict, child: dict) -> int: # 自动计算递增key new_key = len(parent) parent[new_key] = child return new_key
使用示例:
# 初始化空父字典 parent_dict = {} # 依次添加子字典 add_child(parent_dict, {'name': 'pork', 'cals': 100, 'pro': 10, 'sugar': 1}) add_child(parent_dict, {'name': 'chicken', 'cals': 190, 'pro': 19, 'sugar': 19}) add_child(parent_dict, {'name': 'beef', 'cals': 160, 'pro': 12, 'sugar': 2}) print(parent_dict)
输出结果与你给出的结构完全一致。
注意:如果业务中有删除父字典元素的需求,该方案会出现key覆盖问题,比如删除key=1的元素后,父字典长度变为2,再新增元素会分配key=2,覆盖原有key=2的内容,这种场景推荐使用方案2。
方案2:封装独立计数器(支持删除操作)
把父字典和递增计数器封装为类,计数器独立维护,不受删除操作影响:
class AutoIncDict: def __init__(self): self._data = {} self._counter = 0 def add(self, child: dict) -> int: new_key = self._counter self._data[new_key] = child self._counter += 1 return new_key def get_dict(self) -> dict: return self._data
使用示例:
auto_dict = AutoIncDict() auto_dict.add({'name': 'pork', 'cals': 100, 'pro': 10, 'sugar': 1}) auto_dict.add({'name': 'chicken', 'cals': 190, 'pro': 19, 'sugar': 19}) # 执行删除操作不影响计数器递增 del auto_dict.get_dict()[1] auto_dict.add({'name': 'beef', 'cals': 160, 'pro': 12, 'sugar': 2}) print(auto_dict.get_dict()) # 输出:{0: {'name': 'pork', ...}, 2: {'name': 'beef', ...}},不会出现覆盖问题
内容的提问来源于stack exchange,提问作者Erovring
相关产品推荐
相关产品推荐

