>已回答
该程序显示出现在两个文本文件中的单词,并且单词应仅包含字母。打印的信息将是单词和频率。
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}
>>>
代码在以下语句中创建一个 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)
OrderedDict(...)
此行构造一个有序字典,当它立即丢弃时。您不会将其存储在任何地方,尤其是存储在存储原始无序字典的data
中。然后你继续打印所述词典,当然仍然没有订购。
要更改data
引用的内容,必须分配给data
:
data = OrderedDict(...)
print(data)