Python循环向字典追加元素异常:仅添加单个值的解决方法
问题分析
你的代码核心问题在于每次循环时,都用vertex_id_from_shell[shell] = [vertex_ids]覆盖了原有列表,而非向列表中追加新元素。这就导致每个shell对应的列表最终只保留了最后一次循环添加的单个值。
修正方案
- 先为每个shell初始化一个空列表,避免后续赋值覆盖
- 使用
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
相关产品推荐
相关产品推荐

