[英]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.