来自 Python 中 OrderedDict 的不可靠结果



>已回答

该程序显示出现在两个文本文件中的单词,并且单词应仅包含字母。打印的信息将是单词和频率。

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)

最新更新