Python 向列表中的对象追加唯一标识符时出现问题
我有一个大的数据文件,并希望将唯一标识符附加到重复出现的名称(尽管有18k个名称)。我尝试了几种方法,包括idfun,但还没有找到有效的解决方案。目前,这是我尝试过的事情之一。 这只是一个例子,因为我知道y在每个for循环之后重置,并且不是迭代的(生成器) 我看到了这个问题的答案:Python 向列表中的对象追加唯一标识符时出现问题,python,list,unique,Python,List,Unique,我有一个大的数据文件,并希望将唯一标识符附加到重复出现的名称(尽管有18k个名称)。我尝试了几种方法,包括idfun,但还没有找到有效的解决方案。目前,这是我尝试过的事情之一。 这只是一个例子,因为我知道y在每个for循环之后重置,并且不是迭代的(生成器) 我看到了这个问题的答案: def f(seq, idfun=None): # Order preserving return list(_f(seq, idfun)) def _f(seq, idfun=None): ''' O
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
但我真的不知道如何实现它 一种解决方案是使用函数。给定相同的输入,哈希总是返回相同的输出,但决不会为不同的输入提供相同的输出。因此,重复出现的单词被赋予相同的ID
>>> import hashlib
>>> for word in ['beer','gin','beer']: print word, hashlib.md5(word).hexdigest()
...
beer 3e1867f5aee83045775fbe355e6a3ce1
gin a6c72983f8a0a002155d67b12b345629
beer 3e1867f5aee83045775fbe355e6a3ce1
非常感谢你!我不知道你能做到。然而困难在于我想让每个重复出现的单词都有一个不同的ID(这样我就可以把它们区分开来)。实际上,我通过使用简单的+j/j+1解决了自己的问题。
>>> import hashlib
>>> for word in ['beer','gin','beer']: print word, hashlib.md5(word).hexdigest()
...
beer 3e1867f5aee83045775fbe355e6a3ce1
gin a6c72983f8a0a002155d67b12b345629
beer 3e1867f5aee83045775fbe355e6a3ce1