【问题标题】:How to append values to a list in a dictionary while using a while loop?如何在使用while循环时将值附加到字典中的列表?
【发布时间】: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 循环追加,但这也不起作用。每次循环继续时,如何修复它以将新值附加到列表中?

【问题讨论】:

    标签: python list dictionary while-loop append


    【解决方案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() 会返回第二个参数,默认值,在这种情况下是一个空列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-06
      • 2017-02-11
      • 2017-05-30
      • 2020-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多