我的意思是,字典将以这种方式填充:{f"{username}": {"Username": username, "Password": password}}
(应该是这样的:){"test1": {"Username": "test1", "Password": "test-password"}}
(…通过这种方式,),这样您就可以通过用户名(f"{username}
)访问子字典,然后在子字典中显示用户名和密码。
例如,如果我有几个用户名,我希望在主字典中创建新值,并在其中添加子字典。(例如,您将用户名和密码放入子字典中,然后将其添加到主字典中,然后使用{dict}.clear()
清除所有这些都应该在一个循环中实现(不管它是while
还是for i in range()
我已经尝试过了,用下面的代码:
maindict = {}
subdict = {}
while True:
username = input("Enter username: ")
password = input("Enter password: ")
subdict["username"] = username
subdict["password"] = password
maindict[username] = subdict
print(maindict)
但是我的问题是,如果你运行它一次,它会返回正确的东西。但是在第二次输入之后,子字典的第一个值被第二次输入覆盖并且它在主字典中创建了一个新的新值(这是正确的,但它不应该覆盖主字典的第一个值中的子字典的值)
如果你不能跟上我的意思,它打印出如下:
Enter username: test1
Enter password: test1
{'test1': {'username': 'test1', 'password': 'test1'}}
Enter username: test2
Enter password: test2
{'test1': {'username': 'test2', 'password': 'test2'}, 'test2': {'username': 'test2', 'password': 'test2'}}
因此,如您所见,它覆盖了(子字典的)"test1"值,并在主字典中创建了第二个值。很抱歉,如果它混淆了,我只是找不到一个解决方案。如果我解释得不好,请发表评论,我会尽我所能进一步解释。
谢谢!:)
你有这个问题,因为你有subdict = {}
while循环之外。因此,每次更新username
和password
的值时,都是在更新同一个字典subdict
,而不是为每个用户创建一个新字典。因此,您应该将subdict = {}
行保留在while循环中,这将为每个用户创建一个新字典。
问题似乎是在maindict[username] = subdict
行中,所有键的值都指向相同的变量subdict
,因此当您第二次运行它时重复。
要解决这个问题,只需将该行替换为maindict[username] = subdict.copy()
,这将确保前面的条目不会被覆盖。这可能不是性能最好的解决方案,但它可以完成工作。
在循环中初始化空的subdict
,否则它总是指向内存中的同一个对象,并且值被覆盖:
maindict = {}
while True:
subdict = {}
username = input("Enter username: ")
...