Python:[…]位于列表末尾

Python:[…]位于列表末尾,python,list,dictionary,Python,List,Dictionary,我遇到了一个问题,在我将列表添加到字典后,列表末尾出现了一个不需要的[…] 这是我的密码: class Account: accountInfo = {} #ex. ID : 5FE19C (hexadecimal ID's) def __init__(self): choice = raw_input("Would you like to login or signup?\n") if choice.lower() == "login":

我遇到了一个问题,在我将列表添加到字典后,列表末尾出现了一个不需要的
[…]

这是我的密码:

class Account:

    accountInfo = {} #ex. ID : 5FE19C (hexadecimal ID's)

    def __init__(self):
        choice = raw_input("Would you like to login or signup?\n")
        if choice.lower() == "login":
            self.login()

        elif choice.lower() == "signup":
            print "Great! Fill in the following."
            self.signup()

        else:
            self.__init__()

    def signup(self):

        accountID = '%010x' % random.randrange(16**10) # 10 digit hexadecimal ID generator
        personalInfo = []

        self.accountInfo[accountID] = personalInfo

        firstName = raw_input("First Name: ")
        lastName = raw_input("Last Name: ")
        email = raw_input("E-Mail: ")
        password = raw_input("Password: ")
        birthdate = raw_input("DOB (DD/MM/YYYY): ")
        alias = raw_input("Username/Alias: ")

        personalInfo.append(firstName)
        personalInfo.append(lastName)
        personalInfo.append(email)
        personalInfo.append(password)
        personalInfo.append(birthdate)
        personalInfo.append(alias)

        self.accountInfo[accountID].append(personalInfo)

        print self.accountInfo
这是我的输出:

>>> {'a92ab2fcea': ['firstName', 'lastName', 'email', 'password', 'birthdate', 'alias', [...]]}
只是想知道它为什么会出现以及如何删除它

谢谢

我想你是说

self.accountInfo[accountID].append(personalInfo)
将来

self.accountInfo[accountID] = personalInfo

您也不需要代码前面的后一行

要了解到底发生了什么,您需要了解参考资料

>>> a = []
>>> test['a'] = a
>>> a.append(1)
>>> a.append(2)
>>> test['a'] 
[1, 2]
当您执行以下命令时,
self.accountInfo[accountID]=personalInfo
它实际做的是将
personalInfo
的引用传递给
self.accountInfo[accountID]

self.accountInfo[accountID] = personalInfo >> {'a92ab2fcea': []}

personalInfo.append(firstName) >> {'a92ab2fcea': ['firstName']} # Note: Since personalInfo changed, so self.accountInfo[accountID] also changed.

personalInfo.append(lastName) >> {'a92ab2fcea': ['firstName','lastName']}

personalInfo.append(email) >> {'a92ab2fcea': ['firstName','lastName','email']}

personalInfo.append(password) >> {'a92ab2fcea': ['firstName','lastName','email','password']}

personalInfo.append(birthdate) >> {'a92ab2fcea': ['firstName','lastName','email','password','birthdate']}

personalInfo.append(alias) >> {'a92ab2fcea': ['firstName','lastName','email','password','birthdate','alias']}

self.accountInfo[accountID].append(personalInfo) >> {'a92ab2fcea': ['firstName', 'lastName', 'email', 'password', 'birthdate', 'alias', [...]]} # What you are doing is appending personalInfo to personalInfo
意思是修改
personalInfo
也将反映在
self.accountInfo[accountID]

self.accountInfo[accountID] = personalInfo >> {'a92ab2fcea': []}

personalInfo.append(firstName) >> {'a92ab2fcea': ['firstName']} # Note: Since personalInfo changed, so self.accountInfo[accountID] also changed.

personalInfo.append(lastName) >> {'a92ab2fcea': ['firstName','lastName']}

personalInfo.append(email) >> {'a92ab2fcea': ['firstName','lastName','email']}

personalInfo.append(password) >> {'a92ab2fcea': ['firstName','lastName','email','password']}

personalInfo.append(birthdate) >> {'a92ab2fcea': ['firstName','lastName','email','password','birthdate']}

personalInfo.append(alias) >> {'a92ab2fcea': ['firstName','lastName','email','password','birthdate','alias']}

self.accountInfo[accountID].append(personalInfo) >> {'a92ab2fcea': ['firstName', 'lastName', 'email', 'password', 'birthdate', 'alias', [...]]} # What you are doing is appending personalInfo to personalInfo
我想你的意思是:

  • 删除
    self.accountInfo[accountID]=personalInfo
  • 替换self.accountInfo[accountID]。用self.accountInfo[accountID]=personalInfo追加(personalInfo)
  • 但是如果你理解了参考概念

  • 保留
    self.accountInfo[accountID]=personalInfo
  • 删除
    self.accountInfo[accountID]。追加(personalInfo)
    也应该工作
    但后一种方法不可取,因为它可读性较差。

    省略号表示递归定义的结构。在您的情况下,您已经将列表附加到了列表本身。谢谢您的帮助:)另外,您提供的两个说明都不会做同样的事情吗?我的意思不是说输出,因为它们显然给出了相同的输出,但总体而言,编写该代码将提供相同的书面参考?