ANSWERED
此程序显示两个文本文件中出现的单词,单词应仅包含字母。打印的信息将是单词和频率。
import re
from collections import OrderedDict
from operator import itemgetter
f = open('P1Input1.txt', 'r')
g = open('P1Input2.txt', 'r')
data = {}
data2 = {}
for line in f:
for word in line.split():
if word in data:
data[word] += 1
else:
if re.match("^[A-Za-z]*$", word):
data[word] = 1
f.close()
for line in g:
for word in line.split():
data2[word] = 1
g.close()
for key in data:
if key in data2:
data[key] += 1
else:
del data[key]
OrderedDict(sorted(data.items(), key = lambda t: t[1]))
print(data)
由于某种原因,值不断变化,结果如下。我做错了什么?
>>> ================================ RESTART ================================
>>>
{'is': 3, 'how': 2, 'hello': 5, 'it': 3, 'doing': 2, 'you': 2, 'a': 2, 'are': 2, 'day': 2, 'beautiful': 2}
>>> ================================ RESTART ================================
>>>
{'is': 3, 'hello': 5, 'beautiful': 2, 'are': 2, 'how': 2, 'a': 2, 'you': 2, 'it': 3, 'doing': 2, 'day': 2}
>>> ================================ RESTART ================================
>>>
{'hello': 5, 'a': 2, 'you': 2, 'are': 2, 'is': 3, 'it': 3, 'day': 2, 'beautiful': 2, 'how': 2, 'doing': 2}
>>>
答案 0 :(得分:2)
代码在以下语句中创建OrderedDict
对象,但不会将其分配给任何变量。
OrderedDict(sorted(data.items(), key = lambda t: t[1])) # <----
print(data) # <--- `data` still references the old dict object.
在打印之前将其分配给变量。
data = OrderedDict(sorted(data.items(), key = lambda t: t[1]))
print(data)
答案 1 :(得分:1)
OrderedDict(...)
该行构建一个有序字典,立即抛出它。您不会将其存储在任何位置,尤其是存储原始无序字典的data
。然后你继续打印所说的字典,当然还没有订购。
要更改data
引用的内容,您必须分配到data
:
data = OrderedDict(...)
print(data)