繁体   English   中英

Python:字典中的嵌套列表?

[英]Python: Nested List Inside 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']]}
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

personalInfo是一个列表, self.accountInfo[accountID]是另一个列表。

使用self.accountInfo[accountID].append(personalInfo)可以将一个注入另一个。

你可以做self.accountInfo[accountID] = personalInfo

for i in range(1)什么意义呢? 根本没有循环!

我认为这很简单:

personalInfo是一个列表。 您将项目附加到其上,并得到类似[..,..,..] self.accountInfo[accountID]的值也self.accountInfo[accountID]为列表。 然后,将您的第一个列表添加到第二个列表中,从而为您提供列表列表。

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

欢迎! 几件事情:

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM