【发布时间】:2014-03-21 11:22:22
【问题描述】:
我正在为一门涉及计算双字母对频率的课程做作业。我们将自己实现它,而不是使用许多具有强大版本的库中的任何一个。
分配很简单,但是在构建我的模型时,我在尝试迭代键时看到了一些非常奇怪的行为,并且我遇到了一个 Python 问题。我只是将文本拆分为字符列表,然后将每个二元组及其频率存储在dict 中。所以dict 类似于{ 'aa': 7, 'ab' : 9, ... }。很简单,我想。
尝试遍历 dict 以探索数据,我使用了一个简单的 for 循环,例如:
for k in frequencies:
print 'bigram: %s frequency: %s' % (k, frequencies[k])
这适用于大多数二元组,但在整个输出中都有一些行输出非常奇怪,如下所示:
bigram: Ab frequency: 14
bigram: e; frequency: 29
frequency: 4
bigram: l? frequency: 4
bigram: -p frequency: 1
A frequency: 36
如您所见,有许多行没有打印整个格式化字符串。
我尝试通过在构建它们时打印出二元组的每个字母来调试它,如下所示:
print 'letter one: |' + first_letter + '| letter two: `' + second_letter + '`'
这会导致几行相同的奇数输出,其中我的输出字符串的第一部分被忽略:
letter one: |t| letter two: `.`
`
| letter two: `T`
letter one: |T| letter two: `h`
执行此操作时,我注意到似乎是 . 字符在某些(但不是所有)情况下导致了这些问题,因此我修改了二元组解析器以跳过包含非字母数字字符的二元组,但也遇到了同样的问题。看起来some_dict['.T'] 应该没问题,密钥是可散列的,等等。
我的问题:为什么输出(看似)被破坏了?什么可能导致这些格式字符串的第一部分被忽略?
如果重要,请使用 Python 2.7.5。 Mac OS X 和 Ubuntu 12.04 上的输出相同。
【问题讨论】:
-
不应该是 { 'aa': 7, 'ab': 9, ...} 我认为你缺少引号
-
向我们展示您正在使用的数据,如果它不是人类的字典,您可以
print frequencies。 -
@sshashank124 我只是把它放在那里来说明字典的结构,但是很好。编辑以包含引号。
标签: python string dictionary