如何在使用while循环时将值附加到字典中的列表?
Posted
技术标签:
【中文标题】如何在使用while循环时将值附加到字典中的列表?【英文标题】:How to append values to a list in a dictionary while using a while loop? 【发布时间】:2020-12-04 14:22:20 【问题描述】:vacation_poll =
name_prompt = "\nWhat is your name? "
vacation_spot_prompt = "\nWhere would you like to go on vacation? "
repeat_prompt = "\nWould you like to continue? (yes/no) "
active = True
while active:
name = input(name_prompt)
vacation_spot = input(vacation_spot_prompt)
vacation_poll[name] = [vacation_spot]
repeat = input(repeat_prompt)
if repeat == 'no':
active = False
for name, spots in vacation_poll.items():
print("\nThese are " + name.title() + "'s places of interest: ")
for spot in spots:
print("\t" + spot.title())
print(vacation_poll)
我的目标是当相同的键出现时,在字典假期投票中的列表中添加一个新的度假地点。因此,如果在我继续循环后 Joe 再次出现,新的度假地点应该添加到 Joe 的度假地点列表中,但我却将其覆盖。我尝试使用 for 循环追加,但这也不起作用。每次循环继续时,如何修复它以将新值附加到列表中?
【问题讨论】:
【参考方案1】:您是否考虑过要用于字典的架构?从您的代码来看,您似乎正在尝试做类似的事情
vacation_poll =
'Bob': ['Fiji', 'Florida', 'Japan'],
'Joe': ['Disney Land', 'Six Flags', 'Lego Land']
当我处理这类问题时,通常我所做的是设置一个 if 语句来检查字典中是否尚不存在该键,如果不存在,则使用列表对其进行初始化:
if name not in vacation_poll:
vacation_poll[name] = []
这让我不必担心该列表是否在我的代码中稍后不存在,我可以执行类似的操作
vacation_poll[name].append(vacation_spot)
因为在我将与name
关联的值初始化为一个列表之后,我可以指望那里有一个列表。
在您的情况下,您可能会考虑使用集合而不是列表,因为它只强制存储唯一值。这样,如果用户两次输入相同的值,即使第二次再次插入,它也只会记录一次。
【讨论】:
我刚试过这个,因为这是我想做的事情,但我收到一个错误:“TabError:缩进中制表符和空格的使用不一致”vacation_poll = active = True while活动:名称=输入(名称提示)假期点=输入(假期点提示)如果名称不在假期轮询中:假期轮询[名称]=[]假期轮询[名称].append(假期点)重复=输入(重复提示)如果重复==“否”: active = False 也许我放错了?我不得不剪掉一些代码来回复你。 Python 希望所有缩进都使用制表符或空格(通常是 4 个空格)来完成。如果有些缩进是用制表符完成的,有些是用空格完成的(比如你从堆栈溢出复制的代码),那么 python 会感到困惑。如果您使用的是 notepad++ 或 Visual Studio Code 之类的编辑器,它们通常会有一个菜单项,可以将所有缩进转换为仅制表符或仅空格。【参考方案2】:您需要使用一种追加到列表的形式。但是,您不能只使用以下之一:
vacation_poll[name]+=[vacation_spot]
vacation_poll[name].append(vacation_spot)
这样做会引发错误,因为当一个人的第一个度假地点被添加时,字典中没有以他们的名字为索引的值。而是需要 get(index, default)
方法。
vacation_poll[name]=vacation_poll.get(name, [])+[vacation_spot]
这将根据需要。当 key 还没有在字典中时,get()
会返回第二个参数,默认值,在这种情况下是一个空列表。
【讨论】:
以上是关于如何在使用while循环时将值附加到字典中的列表?的主要内容,如果未能解决你的问题,请参考以下文章