【问题标题】:Python: Key error after using get()Python:使用 get() 后出现关键错误
【发布时间】:2016-03-17 19:20:10
【问题描述】:

我在这里有一个代码,它计算以“From”开头的一行中相似的第二个单词的数量,找出哪个单词出现的最大次数,并打印该单词及其频率。

在使用 get 方法的行中,我得到一个关键错误:(在此处插入第二个单词)。这个关键错误发生在第一句本身并且循环不会迭代。我完全不知道为什么会这样。

name = raw_input("Enter file:")
fh = open(name)
d=dict()
max=0
key=''
for line in fh:
    line=line.rstrip()
    if line.startswith('From '):
        x=line.split()
        d[x[1]] = d.get(d[x[1]],0) + 1
for z in d:
    if d[z]>max:
        max=d[z]
        key = z
print key, max

谢谢。

【问题讨论】:

  • 错误来自get调用中的d[x[1]]
  • 如果你写from_, name, rest = line.split(None, 2)之类的东西而不是使用x作为原始元组,代码会更容易阅读(我怀疑错误会跳出来)。

标签: python keyerror


【解决方案1】:
d[x[1]] = d.get(d[x[1]],0) + 1

我觉得这条线不合适。如果你试图增加d[x[1]],如果它还不存在则将其初始化为零,请执行以下操作:

d[x[1]] = d.get(x[1],0) + 1

... 或者只使用defaultdictCounter,它们默认执行初始化,您可以只使用d[x[1]] += 1

【讨论】:

    【解决方案2】:

    使用 defaultdict() 代替 dict()。

    【讨论】:

    • 这并没有真正回答问题(至少目前如此),这并不是说它错了......也许它应该是一个评论,或者你应该提供一个示例来演示如何使用 defaultdict ...
    【解决方案3】:

    考虑:

    >>> d = {}
    >>> d.get(d['a'], 0)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'a'
    

    你会得到一个KeyError,因为 'a' 不在 d 中。

    因此,在您的情况下,KeyError 发生在您为 get 搜索创建密钥时,而不是在 get 本身的调用中(这应该是不可能的)。

    【讨论】:

      猜你喜欢
      • 2022-09-22
      • 2021-12-14
      • 1970-01-01
      • 2019-06-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-18
      相关资源
      最近更新 更多