Python中OrderedDict的结果不可靠

时间:2014-01-17 10:33:10

标签: python collections

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}
>>> 

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)