为什么append会把字典叠加?

发布于 2022-09-06 01:01:12 字数 1049 浏览 18 评论 0

DataSet = open(r'/home/ly/Desktop/CHY/SCIENCE_DATA/Data_Set_01labelDel0Col.csv', 'rb')
reader_DataSet = csv.reader(DataSet)
headers = reader_DataSet.next()
Fisher = {}
featureList = []
for row in reader_DataSet:
    ChangeStrToFloat = {}
    for i in range(0, 3):
        ChangeStrToFloat[i] = float(row[i])
        if i <= 1:
            Fisher[i] = math.atan(ChangeStrToFloat[i])
        else:
            Fisher[i] = ChangeStrToFloat[i]
        print Fisher
        # print ChangeStrToFloat
    featureList.append(Fisher)
    # featureList.append(ChangeStrToFloat)
    print featureList

当featureList.append(ChangeStrToFloat)时,非常正常,下面给出其中一个append之后print的结果:

[{0: 0.162, 1: 0.278, 2: 0.034}, {0: 0.369, 1: 0.199, 2: 0.054}]

但当featureList.append(Fisher)时,就会把前面的字典用新的字典覆盖掉,再添加进去,就变成了两个一样的新的字典在列表里:

[{0: 0.35350004816363706, 1: 0.196433836738036, 2: 0.054}, {0: 0.35350004816363706, 1: 0.196433836738036, 2: 0.054}]

请高手解答!谢谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

指尖凝香 2022-09-13 01:01:12

字典应该放for循环里面

脱离于你 2022-09-13 01:01:12

Fisher[i]这里内容,你仔细打印核对一下,问题应该在这里。程序没报错,内容和预想的不符,就检查内容的来源,看看哪里有问题。featureList.append(Fisher)这个位置层次也看看,是不是放在循环体内了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文