在set python中寻找精确度

时间:2017-06-20 20:37:14

标签: python set

我正在寻找创建一个程序,我想要或多或少地做以下几点:

  1. 从多个CSV文件中读入大学名称列表
  2. 检查我们是否已存储该名称(即它是否唯一)
  3. 如果已存储,请继续,否则将其附加到列表
  4. 我想要的是到目前为止我们拥有的所有UNIQUE大学名称的列表(此时,缩写对我来说无关紧要),但是TOTAL名称的列表非常大。由于python集的查找时间非常快,我想首先检查名称是否在集合中,如果不是,则将名称附加到唯一列表和集合中(我还需要一个列表,因为订购事项)。当你检查某个东西是否在某个集合中时,那个“in”命令是否与检查一串字符是否在一个更大的字符串中一样?换句话说,通过字符串比较,“阿拉巴马大学 - 伯明翰大学”中的“阿拉巴马大学”返回True。在集合比较中,如果我测试“阿拉巴马大学”是否在集合中,但是仅仅添加了“阿拉巴马大学 - 伯明翰”,它是否会返回真实状态?如果是这样,有没有办法测试是否已添加EXACT字符串“阿拉巴马大学”而不是包含“阿拉巴马大学”的其他字符串?

2 个答案:

答案 0 :(得分:2)

要解决您的第一个问题,您可以查看OrderedSetrecipe引用了Python 2 Documentation。{{3}}。这在Py2.6或更高版本以及3.0或更高版本上运行,无需任何修改。该接口几乎与普通集完全相同,只是初始化应该用列表完成。

>>> s = OrderedSet([1, 2, 3])
>>> s.add(4)

使用此配方需要您自担风险。

接下来,in测试集合内部的准确性。

观察:

>>> s = set(['hello'])
>>> 'he' in s
False
>>> s.add('he')
>>> 'he' in s
True

换句话说,搜索词必须完全存在(python会对字符串进行散列以确定它是否存在,因此部分字符串将匹配)。

同样适用于OrderedSet

答案 1 :(得分:0)

university_col = ...
universities = set()
for row in csv_reader:
    universities.add(row[university_col])

result = set()
base_name = ''
for university_name in sorted(universities):
    if not base_name or base_name not in university_name:
         base_name = university_name
    result.add(base_name)