【问题标题】:Increment dictionary value by 1 when user inputs the key当用户输入键时,将字典值增加 1
【发布时间】:2019-08-07 19:00:28
【问题描述】:

我有一个系统,其中使用字典将名称列表分配给值 0。 每当用户输入他们的姓名时,我想让该值增加 1。

我尝试使用 for 循环遍历字典,但是这只会逐字搜索字典中的名称,如果输入的名称不在循环所在的任何迭代中,则不会更新值。

i = 0
dic = {"tim":0, "jimbo":0}

while True:
    while i < len(dic):
        for name, value in dic.items():
            try:
                userinput = input("Enter name: ").lower()
            except(ValueError):
                print("Error")
            if userinput in name:
                dic[name] += 1
                i += 1
            print(dic)

最后的 print 语句确实给出了更新的值,但前提是输入的名称在循环的当前迭代内。理想情况下,我希望每当输入字典中的名称时更新该值。控制台在四次输入后似乎也冻结了。

是否有更明智的方法来执行此操作,特别是针对具有超过 100 个键的更大字典执行此操作?

【问题讨论】:

  • 打破while 内部循环的意义何在?我很困惑为什么你有这个并且还有for 循环。这也是 codereview 的一个问题,而不是 SO。
  • 你能澄清一下你的目标是什么吗?您想要求用户输入多少次?
  • 我想不断征求用户意见。因此,每当用户输入名称并且值更新时,都会再次要求用户输入。这将用于确定特定用户访问系统的次数以及是否真正使用电子邮件地址而不是姓名。

标签: python-3.x dictionary


【解决方案1】:

要让循环不断询问用户输入,只需去掉内部的 whilefor 循环,并将您的测试从 if userinput in name 更改为 if userinput in dic.keys()

i = 0
dic = {"tim":0, "jimbo":0}

while True:
    try:
        userinput = input("Enter name: ").lower()
    except(ValueError):
        print("Error")
    if userinput in dic.keys():
        dic[userinput] += 1
    print(dic)

当然,您可能想为自己建造一个逃生通道。以下将允许您使用CTRL+c 退出无限while

while True:
    try:
        try:
            userinput = input("Enter name: ").lower()
        except(ValueError):
            print("Error")
        if userinput in dic.keys():
            dic[userinput] += 1
        print(dic)
    except KeyboardInterrupt:
        break

【讨论】:

  • 谢谢,似乎有效。对于有 100 个键的字典,您认为这是解决此问题的最佳方法吗?
  • 这取决于你的目标是什么。字典是非常快的结构(例如,请参阅this 答案),因此效率是一个问题,然后很难做得更好。但是,如果不了解您提到的更大系统的更多信息,则无法说这是否真的是“最佳”选择。
【解决方案2】:

是这个吗?

keys = dic.keys()
while True:
    key = input()
    if key in keys:
        dic[key] += 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多