当尝试将列表作为我的字典的定义追加时,我目前仍然无法使用嵌套列表的输出。
我知道这可能是我应该包含的更多代码,但我认为显示更多而不是更多很有帮助。
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']]}
答案 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)