python - 为什么嵌套字典不能正确附加到列表中?
问题描述
我尝试将字典附加到列表中,但我发现子字典始终保留我从 CSV 文件(deviceProfile.csv)中读取的最后一个。有谁知道为什么?这是我的 CSV 文件。
name,description,primaryTable,startingAddress,boolIndex
test_name_1,1,table_1,1,1
test_name_2,2,table_2,2,2
test_name_3,3,table_3,3,3
这是我的python代码。
import csv
import yaml
from pprint import pprint
resource = {
'name': "",
'description': "",
'attributes':
{ 'primaryTable': "", 'startingAddress': "", 'boolIndex': "" },
}
resourceArray = []
with open("deviceProfile.csv") as f:
myCsvDic = csv.DictReader(f)
for row in myCsvDic:
resource['name'] = row['name']
resource['description'] = row['description']
resource['attributes']['primaryTable'] = row['primaryTable']
resource['attributes']['startingAddress'] = row['startingAddress']
resource['attributes']['boolIndex'] = row['boolIndex']
test = resource.copy()
resourceArray.append(test)
pprint (resourceArray)
结果是
[{'attributes': {'boolIndex': '3',
'primaryTable': 'table_3',
'startingAddress': '3'},
'description': '1',
'name': 'test_name_1'},
{'attributes': {'boolIndex': '3',
'primaryTable': 'table_3',
'startingAddress': '3'},
'description': '2',
'name': 'test_name_2'},
{'attributes': {'boolIndex': '3',
'primaryTable': 'table_3',
'startingAddress': '3'},
'description': '3',
'name': 'test_name_3'}]
奇怪的是name和description正确附加到 list 中,但是attributes。属性总是附加到最后一个子字典。
任何帮助将不胜感激。谢谢。
解决方案
这是因为copy
. 默认情况下,复制是浅复制,它只会复制 1 级元素。你应该deepcopy
在你的情况下使用。替换test = resource.copy()
为:
from copy import deepcopy
test = deepcopy(resource)
查看此链接以获取更多信息,或任何其他告诉您有关copy(shallow and deep)
.
推荐阅读
- java - RecyclerView 项目覆盖整个屏幕
- html - hr颜色不清晰
- gnuplot - GNU 绘图和动画(在 Windows 上)
- html - 有没有办法将 8 列 div 推到右侧而不在 Bootstrap 中添加 4 列 div?
- c++ - Eigen3 A.ldlt().solve(b) 错误符号
- kotlin - 与 LiveData 观察者、适配器、协程混淆
- android - Jetpack Compose – LazyColumn 不重组
- google-apps-script - 如何在点击时自动拉取由链接生成的 .xlsx 文件?没有固定的 URL。详情如下
- android - Android Studio Firebase 多个位置同时更改,但我只想查看我从微调器中选择的位置
- marklogic - MarkLogic 数据中心集群升级