Питон: [...] в конце списка - PullRequest
       1

Питон: [...] в конце списка

0 голосов
/ 23 ноября 2018

Я столкнулся с проблемой, когда после добавления списка в словарь я получаю нежелательный [...] в конце списка.

Вот мой код:

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', [...]]}

Просто интересно, почему он появляется и как его удалить.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Чтобы понять, что именно произошло, вам нужно знать о ссылках.

>>> a = []
>>> test['a'] = a
>>> a.append(1)
>>> a.append(2)
>>> test['a'] 
[1, 2]

Когда вы выполнили строку self.accountInfo[accountID] = personalInfo То, что на самом деле произошло, - передать ссылку personalInfo на self.accountInfo[accountID]

Значение модификации 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

Я думаю, что вы хотели сделать следующее:

  1. удалить self.accountInfo[accountID] = personalInfo
  2. заменить self.accountInfo[accountID].append(personalInfo) with self.accountInfo[accountID] = personalInfo

Но если вы понимаете эталонную концепцию,

  1. оставьте self.accountInfo[accountID] = personalInfo
  2. удалить self.accountInfo[accountID].append(personalInfo) Следует такжеработа!

Но последний способ не рекомендуется, так как он менее читабелен.

0 голосов
/ 23 ноября 2018

Я думаю, вы имеете в виду

self.accountInfo[accountID].append(personalInfo)

, чтобы быть

self.accountInfo[accountID] = personalInfo

, вам также не нужна последняя строка в коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...