【问题标题】:KeyError with dictionariesKeyError 与字典
【发布时间】:2014-11-19 01:46:38
【问题描述】:

我试图让用户输入将保存到字典中的城市和温度。但是,Python 一直告诉我我遇到了 KeyError。为什么会发生这种情况,我该如何解决?谢谢。

def main():
    city = {}
    keepgoing = True
    while keepgoing:    
        user = input("Enter city followed by temperature: ")
        for valu in user.split():
            city[valu] = city[valu]+1

        if user == "stop":
            keepgoing = False
            print(city)


main()

【问题讨论】:

    标签: python-3.x dictionary keyerror


    【解决方案1】:

    将你的 for 循环更改为如下所示:

    city = {}
    while keepgoing:
        user = input("Enter city followed by temperature: ")
        for valu in user.split():
            if valu not in city:
                city[value] = 0
            city[value] = city[value]+1
    

    因为第一次出现错误,valu 不是 city 中的键。结果,city[valu] 失败。当密钥不存在时将其设置为0(或其他一些默认值)将解决您的问题

    【讨论】:

    • 好的。这解决了错误,但我想出了另一个问题。那就是程序会将所有内容分配给一个键,例如,如果有人输入“Denver -6”,程序会将 {Denver:1, -6:1} 放入字典中。关于如何解决这个问题的任何想法?
    • @user3495234:这由您决定。你必须弄清楚你想用'Denver'-6 做什么。根据您问题中的文字,我认为您想使用一个作为键,另一个作为值;但您的代码并未反映这一点。
    【解决方案2】:

    要解决眼前的问题,请替换:

            city[valu] = city[valu]+1
    

    与:

            city[valu] = city.get(valu, 0) + 1
    

    说明

    city.get(valu)city[valu] 类似,只是如果密钥不存在,它会提供默认值Nonecity.get(valu, 0) 类似,但将默认值设置为 0

    完成程序

    猜你想要什么,这里是重写代码:

    def main():
        city = {}
        while True:
            user = input("Enter city followed by temperature: ")
            if user == "stop":
                print(city)
                break
            name, temperature = user.split()
            city[name] = temperature
    
    main()
    

    运行中:

    Enter city followed by temperature: NYC 101
    Enter city followed by temperature: HK 115
    Enter city followed by temperature: stop
    {'NYC': '101', 'HK': '115'}
    

    【讨论】:

    • 好的。这解决了错误,但我想出了另一个问题。那就是程序会将所有内容分配给一个键,例如,如果有人输入“Denver -6”,程序会将 {Denver:1, -6:1} 放入字典中。关于如何解决这个问题的任何想法?
    • @user3495234 我在答案末尾添加了一个更完整的代码重写。让我知道这是否是您想要的。
    • 对。就是这样。很抱歉模棱两可。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 2016-12-20
    • 2021-02-03
    • 1970-01-01
    相关资源
    最近更新 更多