无法将唯一标识符附加到列表中的对象

时间:2014-06-03 15:29:58

标签: python list unique

我有一个大型数据文件,并希望为重复名称附加唯​​一标识符(尽管有18k名称)。我尝试了几种方法,包括idfun,但没有找到一个有效的解决方案。目前,这是我尝试过的事情之一。 这只是我理解的一个例子,y在每个for循环之后重置并且不是迭代(生成器)。

combined = []
for line in template: 
    if line.startswith(">"):
        broken = line.split(" ")
        entry = broken[0]
        combined.append(entry)
        x = 0
        y =+ x
        print entry + str(y)

我已经看到了这个问题的答案:

def f(seq, idfun=None): # Order preserving
  return list(_f(seq, idfun))

def _f(seq, idfun=None):  
  ''' Originally proposed by Andrew Dalke '''
  seen = set()
  if idfun is None:
    for x in seq:
      if x not in seen:
        seen.add(x)
        yield x
  else:
    for x in seq:
      x = idfun(x)
      if x not in seen:
        seen.add(x)
        yield x

但是真的不明白如何实现它。

1 个答案:

答案 0 :(得分:1)

一种解决方案是使用hashing功能。在给定相同输入的情况下,散列总是返回相同的输出,但永远不会向不同的输入提供相同的输出。因此,重复出现的单词具有相同的ID。

>>> import hashlib
>>> for word in ['beer','gin','beer']: print word, hashlib.md5(word).hexdigest()
... 
beer 3e1867f5aee83045775fbe355e6a3ce1
gin a6c72983f8a0a002155d67b12b345629
beer 3e1867f5aee83045775fbe355e6a3ce1