Python:字典中的嵌套列表?

时间:2018-11-23 01:23:11

标签: 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":
            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

我不明白为什么我要在字典中得到嵌套列表的输出。字典的内容是正确的,但这只是不想要的和不必要的嵌套列表。

输出:

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

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

create()是一个列表,personalInfo是另一个列表。

使用self.accountInfo[accountID],您将一个注入另一个。

您可以进行self.accountInfo[accountID].append(personalInfo)

self.accountInfo[accountID] = personalInfo有什么意义?根本没有循环!

答案 2 :(得分:0)

我认为这很简单:

personalInfo是一个列表。您将项目追加到其中,并得到类似[..,..,..]的信息。您还可以将self.accountInfo[accountID]的值初始化为一个列表。然后,将您的第一个列表追加到第二个列表,从而为您提供列表列表。

尝试使用self.accountInfo[accountID].append(personalInfo)代替self.accountInfo[accountID] = personalInfo

答案 3 :(得分:0)

欢迎光临!两件事:

导入通常应位于文件的顶部。为您的signup     功能,import random应该在顶部。

您的__init__不应在课程上再次被调用。 __init__被认为是该类的“构造函数”-因此通常应将其调用一次。考虑将您的raw_input部分放在另一个函数中,并调用两次。

打印是一个函数,而不是语句(最后一行)

要回答您的问题,您有一个嵌套列表,因为您要制作两个列表。首先,您要建立personalInfo,然后将该项目附加到为accountInfo创建的空白列表中,如果您只设置self.accountInfo[accountID] = personalInfo`,则可以得到一个单层列表。

答案 4 :(得分:0)

我现在无法测试,但是:  将self.accountInfo[accountID] = []替换为self.accountInfo[accountID] = personalInfo。并删除for i in range(1): self.accountInfo[accountID].append(personalInfo)