我试图使用del函数删除用户的特定输入,但它删除了它下面的整个键值
for account3 in accounts:
print("t ", account3["Name"].ljust(25), account3["Username"].ljust(27), account3["Password"])
userinput = input('Account Name you want to delete: ')
for account4 in accounts:
if userinput == account4["Name"]:
userinput = input('Re-enter name to confirm: ')
for account5 in accounts:
if userinput == account5["Name"]:
del account5["Name"], account5["Username"], account5["Password"]
print('Deleted Successfully!')
menu()
break
用户确认删除后,删除字典中的所有值,并给出一个key error: "name"
。是否有办法只删除用户提供的信息?
将值设置为None
,而不是删除条目。
用这个代替del
行
account5["Name"], account5["Username"], account5["Password"] = None, None, None
为了避免必须在列表中循环多次才能找到匹配的帐户,我建议构建一个字典,将名称映射到每个帐户,并使用accounts.remove()
删除帐户。
accounts_by_name = {account["Name"]: account for account in accounts}
for account in accounts:
print("t ", account3["Name"].ljust(25), account3["Username"].ljust(27), account3["Password"])
name = input("Account name you want to delete: ")
if name not in accounts_by_name:
continue
if input("Re-enter name to confirm: ") != name:
continue
accounts.remove(accounts_by_name[name])
menu()
break