用唯一值标记元组

我有一个元组列表,我想标记其中一个值的唯一性。例如:

tupes = [(a,1),(a,2),(b,(c,3)]

output =[(a,1,unique),2,repeat),3,unique)]

我已经根据其他示例尝试了以下方法,但是它仅保留Y的第一对,而不保留唯一值:

seen = set()
keep = []
for x,y in tupes:
    if y in seen:
        pass
    else:
        seen.add(y)
        keep.append((x,y))

我有一个使用翻转字典的工作程序,但是它会一遍又一遍地重新构造数据,通常效率很低。功能正常,但难看。

有什么更好的方法来解决这个问题?

sdaSDWDADW 回答:用唯一值标记元组

您可以使用collections.Counter,然后使用列表推导来遍历标记为'unique''repeat'的元素:

from collections import Counter

tupes = [('a',1),('a',2),('b',('c',3)]

c = Counter(x[1] for x in tupes)
output = [x + ('unique',) if c[x[1]] == 1 else x + ('repeat',) for x in tupes]

# [('a',1,'unique'),2,'repeat'),3,'unique')]
,

另一种解决方案

from collections import Counter
tupes = [('a',3)]
counts = Counter(x[1] for x in tupes)
counts_dict = dict(counts)
f = [(x,y,"unique" if counts_dict.get(y)==1 else "repeat")  for x,y in tupes]

输出

[('a','unique')]
本文链接:https://www.f2er.com/3148007.html

大家都在问