我有一个大型数据文件,并希望为重复名称附加唯一标识符(尽管有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
但是真的不明白如何实现它。
答案 0 :(得分:1)
一种解决方案是使用hashing功能。在给定相同输入的情况下,散列总是返回相同的输出,但永远不会向不同的输入提供相同的输出。因此,重复出现的单词具有相同的ID。
>>> import hashlib
>>> for word in ['beer','gin','beer']: print word, hashlib.md5(word).hexdigest()
...
beer 3e1867f5aee83045775fbe355e6a3ce1
gin a6c72983f8a0a002155d67b12b345629
beer 3e1867f5aee83045775fbe355e6a3ce1