从文件中读取单词到集合,保持顺序

1 投票
2 回答
2916 浏览
提问于 2025-04-16 17:10

这里有一个包含Unicode单词的数组,用在Python脚本中。

texts =[u"abc", u"pqr", u"mnp"]

这个脚本在上面这三个单词的例子中运行得很好。问题是,文本文件里有成千上万的单词。 我该怎么从文本文件中读取这些单词呢?

更新: 我有两个问题。一个是从文本文件中读取的单词顺序在输出中没有保持。 另一个是文本文件里有Unicode字符,所以在我原来的例子中有个“u”。

# cat testfile.txt
Testing this file with Python

# cat test.py
#!/usr/bin/python
# -*- coding: utf-8 -*-

f     = open('testfile.txt', 'r')
texts  = set(f.read().split())
print (texts)

# python test.py
set(['this', 'Python', 'Testing', 'with', 'file'])

2 个回答

2

这是因为集合的工作方式。集合不保持存储在其中的项目的顺序。

来自文档

集合对象是一个无序的、由不同的可哈希对象组成的集合。

2

我觉得你的文件读取代码没有问题。因为文件中的单词是用空格分开的,而且文件也不大,可以一次性读取,所以应该没问题。真正的问题在于,如果你把这些单词放进一个 set 里,它们的顺序会变。

如果你想要单词保持和文件里一样的顺序,那你为什么要用 set 呢?直接用列表来保存它们就可以了。

如果你需要用 set 来去重或者其他目的,那你可以考虑以下几种方法:

  • 使用 OrderedDict 类 - 从 Python 2.7 开始就有这个功能,网上也有适用于早期版本的教程。
  • 创建一个有序集合 - 这里有一个 SO 问题,讨论得很好

撰写回答