python 字典嵌套字典出现的赋值异常问题解决

在处理字典嵌套字典时,如果第二层字典未在每次循环中重新定义,会导致所有第二层字典被同一实例覆盖。通过在循环内部初始化第二层字典,可以避免这个问题,从而正确保存每个循环的独立值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python字典嵌套赋值异常问题

简介

问题很小,但是调了很长时间bug。
主要是字典嵌套字典的时候,第二层字典必须每次循环都要重新定义一下,否则会出现每一次循环会使用当前的字典值覆盖之前所有的第二层字典值。主要可能是因为定义的是一个字典地址,每一次访问都是访问的地址,所以造成地址上的赋值同步更新。


问题描述

sum_gray_dict是我定义的第一层字典gray_dict是我定义的第二层字典

 gray_dict = {
   
   }
 sum_gray_dict = {
   
   }
    # 获取imgL中的多个图像相对应defect和normal区域的灰度值
    for point_area_coor_index, point_area_coor in enumerate(points_area_coor):  # 对多个区域进行遍历
        #print(points_label[point_area_coor_index])
 
        for index, img_name in enumerate(imgL):  # 遍历图像列表
            #print(img_name)

            for locViewAn in locationViewAngle:  
### Python嵌套字典的使用方法 #### 访问嵌套字典中的值 在 Python 中,可以通过连续使用键名来访问嵌套字典中的值。例如: ```python nested_dict = { 'level1': { 'level2': { 'key': 'value' } } } print(nested_dict['level1']['level2']['key']) # 输出: value ``` 如果不确定嵌套层数或者某些键可能不存在,则可以使用 `get()` 方法[^1]。 #### 修改嵌套字典中的值 要修改嵌套字典中的值,可以直接赋值给指定路径下的键。例如: ```python nested_dict = { 'level1': { 'level2': { 'key': 'old_value' } } } nested_dict['level1']['level2']['key'] = 'new_value' print(nested_dict['level1']['level2']['key']) # 输出: new_value ``` 对于深层嵌套的情况,建议先检查目标键是否存在再进行修改[^3]。 #### 添加新键值对 向嵌套字典中添加新的键值对也很简单,只需按照所需的层级结构定义即可。例如: ```python nested_dict = {} # 创建多级嵌套 nested_dict.setdefault('level1', {}).setdefault('level2', {})['key'] = 'value' print(nested_dict) # 输出: {'level1': {'level2': {'key': 'value'}}} ``` 这里使用了 `setdefault` 方法以确保中间层级不会因为缺失而引发错误[^4]。 #### 删除嵌套字典中的项 删除嵌套字典中的某一项可以使用 `del` 关键字或 `pop()` 函数完成。需要注意的是,在执行删除之前应确认该条目确实存在于当前上下文中以免抛出异常。示例如下: ```python nested_dict = { 'level1': { 'level2': { 'key_to_remove': 'value', 'keep_key': 'another_value' } } } if 'key_to_remove' in nested_dict['level1']['level2']: del nested_dict['level1']['level2']['key_to_remove'] print(nested_dict) # 输出: {'level1': {'level2': {'keep_key': 'another_value'}}} ``` #### 合并两个嵌套字典 当需要合并两个具有相同结构的嵌套字典时,可以递归地遍历每一个子节点并将它们的内容融合在一起。下面是一个简单的实现方式: ```python def merge_dicts(d1, d2): for key, value in d2.items(): if isinstance(value, dict): # 如果遇到另一个字典则继续向下探索 node = d1.setdefault(key, {}) merge_dicts(node, value) else: d1[key] = value dict_a = {'common': {'shared': 1}, 'uniqueA': 2} dict_b = {'common': {'extraB': 3}, 'uniqueB': 4} merge_dicts(dict_a, dict_b) print(dict_a) # 输出: {'common': {'shared': 1, 'extraB': 3}, 'uniqueA': 2, 'uniqueB': 4} ``` 此函数会将第二个参数的所有内容安全地融入第一个参数之中而不破坏原有数据[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值