Python: вложенный список внутри словаря? - PullRequest
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):
        import random

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

        self.accountInfo[accountID] = []

        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)

        for i in range(1):
            self.accountInfo[accountID].append(personalInfo)
            #creates an unwanted nested list, but the output is correct

        print self.accountInfo

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

output:

>>> {'6de7bcf201': [['firstName', 'lastName', 'email', 'password', 'birthdate', 'alias']]}

Ответы [ 5 ]

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

Я не могу сейчас проверить, но:Заменить self.accountInfo[accountID] = [] на self.accountInfo[accountID] = personalInfo.И удалить for i in range(1): self.accountInfo[accountID].append(personalInfo)

0 голосов
/ 23 ноября 2018
personalInfo = []  # PersonalInfo is a list
# skipped
self.accountInfo[accountID].append(personalInfo)  # add list to the list

Это похоже на

main = []
p_info = []
main.append(p_info)  # result would be main = [[]]

Если вы хотите, чтобы внутри списка был только точечный текст, измените personalInfo на {}, что потребует изменить personalInfo.append на personalInfo [x] = y

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

Я думаю, это довольно просто:

personalInfo - это список.Вы добавляете к нему предметы и получаете что-то вроде [..,..,..].Вы инициируете значение self.accountInfo[accountID] также в виде списка.Затем вы добавляете свой первый список ко второму списку, давая вам список списков.

Вместо self.accountInfo[accountID].append(personalInfo) попробуйте self.accountInfo[accountID] = personalInfo

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

Добро пожаловать!Пара вещей:

Импорт обычно должен быть в начале файла.Для вашей signup функции import random должно быть вверху.

Ваш __init__ не должен вызываться снова в классе.__init__ считается "конструктором" класса - как таковой он обычно должен вызываться один раз.Попробуйте поместить свой raw_input раздел в другую функцию и дважды вызвать его.

Печать - это функция, а не оператор (ваша последняя строка)

Чтобы ответить на ваш вопрос, у вас есть вложенный списокпотому что вы делаете два списка.Сначала вы создаете personalInfo, а затем добавляете этот элемент в пустой список, который вы создали для accountInfo, вы можете получить одноуровневый список, если просто установите self.accountInfo[accountID] = personalInfo`.

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

personalInfo - это список, self.accountInfo[accountID] - другой список.

С self.accountInfo[accountID].append(personalInfo) вы вводите один внутрь другого.

Вы можете сделать self.accountInfo[accountID] = personalInfo

А какой смысл for i in range(1)?Это вообще не зацикливание!

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