【问题标题】:Issue with keys/values in building a python dictionary [duplicate]构建python字典时的键/值问题[重复]
【发布时间】:2017-04-22 18:02:50
【问题描述】:

我试图通过构建一个字典来计算文件“xxxx”中的单词,其中键是单词,值是出现次数。到目前为止,我得到了这个:

fil = open("xxxx","r")
X = fil.read()

count = {}
for key in X.split():
  count[key] += 1

for i in count:
  print (i, count[i])

当我运行它时,我得到:

Traceback (most recent call last):
  File "countword.py", line 9, in <module>
    count[key] = count[key] + 1
KeyError: 'From'

'From' 是文件中的第一个单词,由于到目前为止还没有键 'From',我相信这是错误的原因。但是这样做的正确方法是什么?我还需要在进入 for 循环之前以某种方式初始化值吗?

【问题讨论】:

  • 使用collections.defaultdict
  • 第一次遇到一个词,key不存在所以count[key]失败,看一个defaultdict。
  • 您的基本问题是您试图添加一个不存在的值。这是collections.defaultdictdict.get() 都可以解决的问题,但更好的解决方案是使用collections.Counter() 为您计算。
  • @MartijnPieters everyone 在这里对Counter 赞不绝口,但我一直发现.get(value, 0) + 1 作为计数器更快,Raymond Hettinger 在他的一个主题演讲中也推荐了它.是否有客观原因表明它更好,除了稍微不那么模棱两可的代码,我错过了?
  • @roganjosh 移植到 Python 3 变得越来越容易。我会在工作中推动转换。 Python 2 是遗留的,很快就会消失(距离生命周期结束还有 3 年!)

标签: python dictionary hashmap


【解决方案1】:

使用Counter

from collections import Counter

X = "From A to B"

count = Counter()
for key in X.split():
    count[key] += 1

count
# Counter({'A': 1, 'B': 1, 'From': 1, 'to': 1})

【讨论】:

  • 这行得通,谢谢,但我会对没有内置专门方法的解决方案感兴趣。我将如何仅使用普通的 pythonic 字典来做到这一点。
  • 好的,我刚刚阅读了它,我意识到由于有了新键,这可以通过计数器或默认字典来完成。
猜你喜欢
  • 2021-08-02
  • 1970-01-01
  • 2019-02-05
  • 2019-02-25
  • 2019-03-12
  • 1970-01-01
  • 2017-09-06
  • 1970-01-01
  • 2018-05-29
相关资源
最近更新 更多