如何在使用while循环时将值追加到字典中的列表?

时间:2020-08-14 17:04:12

标签: python list dictionary while-loop append

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)

我的目标是在显示相同键时在字典Vacation_poll内的列表中添加一个新的休假点。因此,如果在继续循环后Joe再次出现,则应将新的休假点添加到Joe的休假点列表中,但我会将其覆盖。我尝试使用for循环进行追加,但这也不起作用。每次循环继续时,如何解决将其添加到列表中的新值?

2 个答案:

答案 0 :(得分:2)

您是否考虑过要用于字典的架构?从您的代码看来,您正在尝试做类似的事情

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关联的值初始化为列表之后,我可以指望那里的列表了。

在您的情况下,您可能考虑使用集合而不是列表,因为它仅强制存储唯一值。这样,如果用户两次输入相同的值,即使第二次再次插入它也只会记录一次。

答案 1 :(得分:2)

您需要使用一种附加到列表的形式。但是,您不能只使用以下之一:

vacation_poll[name]+=[vacation_spot]
vacation_poll[name].append(vacation_spot)

这样做会引发错误,因为当添加一个人的第一个假期时,字典中的人名将没有索引值。相反,需要使用get(index, default)方法。

vacation_poll[name]=vacation_poll.get(name, [])+[vacation_spot]

这将是所需的。当键尚未在字典中时,get()将返回第二个参数,默认值,在这种情况下为空列表。