将矩阵各列追加到字典不同键时出现值同步重复问题求解
问题原因
这是Python中可变对象引用共享导致的问题:
- 你先创建了
list_dict = [[] for i in range(10)]这一个嵌套列表对象 - 后续给字典赋值的操作
out_dict_2.update({'key_a': list_dict, 'key_b': list_dict, 'key_c': list_dict}),本质是让三个键都指向了同一个list_dict的内存地址,没有生成独立的新列表 - 因此不管你修改
key_a、key_b还是key_c对应的子列表,都是在修改同一块内存里的内容,最终三个键的取值自然完全相同。
解决方案
给每个字典键单独生成独立的嵌套列表,不要复用同一个列表对象即可,修正后的代码如下:
out_dict_2 = {} # 每个key单独生成独立的10个空列表的嵌套结构,互不干扰 out_dict_2['key_a'] = [[] for i in range(10)] out_dict_2['key_b'] = [[] for i in range(10)] out_dict_2['key_c'] = [[] for i in range(10)] for index in range(10): for line in list_2: line = line.strip() line = line.split() if areallnumbers(line): # 校验列表中所有元素是否均可转为float类型 out_dict_2['key_a'][index].append(line[0]) out_dict_2['key_b'][index].append(line[1]) out_dict_2['key_c'][index].append(line[2])
如果想要更简洁的写法,也可以用字典推导式一次性生成:
out_dict_2 = {k: [[] for _ in range(10)] for k in ['key_a', 'key_b', 'key_c']}
内容的提问来源于stack exchange,提问作者drSlump
相关产品推荐
相关产品推荐

