You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python循环向字典追加元素异常:仅添加单个值的解决方法

问题分析

你的代码核心问题在于每次循环时,都用vertex_id_from_shell[shell] = [vertex_ids]覆盖了原有列表,而非向列表中追加新元素。这就导致每个shell对应的列表最终只保留了最后一次循环添加的单个值。

修正方案
  1. 先为每个shell初始化一个空列表,避免后续赋值覆盖
  2. 使用append()方法向列表中追加元素,而非重新赋值列表

修正后的代码如下:

shells = {0: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], 1: [14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], 2: [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41]}
uvsID = [0, 1, 3, 2, 2, 3, 5, 4, 4, 5, 7, 6, 6, 7, 9, 8, 1, 10, 11, 3, 12, 0, 2, 13, 14, 15, 16, 17, 17, 16, 18, 19, 19, 18, 20, 21, 21, 20, 22, 23, 15, 24, 25, 16, 26, 14, 17, 27, 28, 29, 30, 31, 31, 30, 32, 33, 33, 32, 34, 35, 35, 34, 36, 37, 29, 38, 39, 30, 40, 28, 31, 41]
vertsID = [0, 1, 3, 2, 2, 3, 5, 4, 4, 5, 7, 6, 6, 7, 1, 0, 1, 7, 5, 3, 6, 0, 2, 4, 8, 9, 11, 10, 10, 11, 13, 12, 12, 13, 15, 14, 14, 15, 9, 8, 9, 15, 13, 11, 14, 8, 10, 12, 16, 17, 19, 18, 18, 19, 21, 20, 20, 21, 23, 22, 22, 23, 17, 16, 17, 23, 21, 19, 22, 16, 18, 20]


vertex_id_from_shell = {}

for shell in shells:
    selection_shell = shells.get(shell)
    # 初始化当前shell对应的空列表
    vertex_id_from_shell[shell] = []
    
    for idx, item in enumerate(selection_shell):
        if item in uvsID:
            uv_index = uvsID.index(item)
            vertex_ids = vertsID[uv_index]
            # 向列表追加元素,而非覆盖
            vertex_id_from_shell[shell].append(vertex_ids)
    
print(vertex_id_from_shell)
补充说明

如果需要收集uvsID中所有匹配item的索引对应的vertsID值(而非仅第一个匹配项),可以把uv_index = uvsID.index(item)替换为遍历所有匹配索引的逻辑:

# 替换原uv_index和vertex_ids相关代码
for uv_index in [i for i, x in enumerate(uvsID) if x == item]:
    vertex_ids = vertsID[uv_index]
    vertex_id_from_shell[shell].append(vertex_ids)

内容的提问来源于stack exchange,提问作者johancc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 06:54:22