【问题标题】:Create a dictionary out of a text file从文本文件中创建字典
【发布时间】:2016-11-18 01:55:44
【问题描述】:

例如,假设我们有一个名为 letters 的 .txt 文件,其中包含,

a
b
b
c
d
d
d
d

我将如何创建一个字典,其中键是文件中的单个字母,值是每个字母出现的次数?例如,a 是键,对应的值为 1,而 b 也是键,其值为 2。

我们刚开始学习打开文件和创建字典,所以我假设我会从类似的东西开始,

file = open('letters.txt', 'rt') 

我不太确定 rt 部分是否正确,但是我们必须搜索“文件”,所以,

for letter in file:

但我不太确定如何搜索字母,将它们设为键,然后将字母出现的次数添加到字典中的值中。有什么建议吗?

【问题讨论】:

  • 从一件事开始:尝试在各个阶段打印出变量,或致电typehelp 获取更多信息。如果您知道for X in file: 做了什么,只需检查X 是什么,我相信您可以通过实验推断出您需要做什么。

标签: python python-3.x dictionary


【解决方案1】:

Python 在名为 collectionscollections 模块中对 dict 有一个方便的扩展,它可以满足您的需求:

>>> from collections import Counter
>>> with open('letters.txt') as f:
...     c = Counter(map(str.strip, f))
>>> c
Counter({'a': 1, 'b': 2, 'c': 1, 'd': 4})

如果你真的想要它作为dict

>>> dict(c)
{'a': 1, 'b': 2, 'c': 1, 'd': 4}

【讨论】:

  • Counter 已经是 dict(即isinstance(c,dict) -> True),因此转换它仅与打印目的相关。
  • 虽然Counterdict,但它确实有不同的行为c['e'] 返回0,而dict(c)['e']KeyError。所以我不太同意它只是为了展示,它可能取决于行为预期。
【解决方案2】:

如果这是一个实际问题,您可能应该这样做:

from collections import Counter
counts = Counter([ln.strip() for ln in open('letters.txt')])

甚至

counts = Counter(open('letters.txt').read())

(这也将计算换行符)。

由于您显然是在进行学习练习,因此您可能正在寻找类似的东西:

counts = dict()
for line in open('letters.txt'):
    letter = line[0]
    counts[letter] = counts.get(letter, 0) + 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 2013-07-13
    相关资源
    最近更新 更多