为什么这些.append()语句会相互覆盖?

时间:2017-03-12 22:47:48

标签: python list python-3.x dictionary append

我的功能如下:

def control(qstat):
    gatnum = int(input("What number of control gates is this control qubit a part of?"))
    global qstatnum
    qstatnum = {}
    qstatnum[gatnum] = []
    qstatnum[gatnum].append(qstat) #seems to be a problem
    return qstat

然而,有一个问题。假设我运行一次。列表中将有一个项目。然后,我再次运行它,其中一个项目可以与应该添加到列表中的第二个项目区分开来。当我打印qstatnum[gatnum]时,列表只包含第二项,这使我相信.append()语句在某种程度上被错误地写入并覆盖了以前添加到列表中的任何内容。

这是正确的诊断吗?为什么会这样?任何帮助,将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:2)

每次调用该函数时,您都在创建一个新的qstatnum dict,因此解决方案是在函数外部创建字典:

qstatnum = {}

def control(qstat):
    gatnum = int(input("What number of control gates is this control qubit a part of?"))
    try:
        qstatnum[qstat].append(gatnum)
    except:
        qstatnum[qstat] = [gatnum]
    return qstat

你需要一个try: except:块来验证密钥是否已经存在于字典中,如果它不存在,只需添加第一个值,否则使用append。

@DanD。方法似乎更短,请看一下:

qstatnum = {}

def control(qstat):
    gatnum = int(input("What number of control gates is this control qubit a part of?"))

    qstatnum.setdefault(qstat, []).append(gatnum)

    return qstat

答案 1 :(得分:0)

每次调用该方法时,qstatnum都设置为空。所以基本上你每次都不做任何事情。