应用 set() 删除元组内列表中的重复项 - Python

Posted

技术标签:

【中文标题】应用 set() 删除元组内列表中的重复项 - Python【英文标题】:apply set() to remove duplicates in a list inside a tuple - Python 【发布时间】:2015-06-24 16:45:08 【问题描述】:

我有一个 RDD 键/值对,其中 value 是这样的列表: 我的RDD是这样的

[("a1",["w1","w2","w3","w1"]), ("a2",["w3","w3","w3","w1"]), ....

如何将函数集应用到列表元素以删除重复项?

到目前为止我有这个但没有得到正确的结果:

uniqueTokens = RDD.map(lambda x: (x[0],set(x[1])))

感谢您的帮助!

【问题讨论】:

请展示您得到的结果,与您的预期相比。 我有这个 RDD:[("a1",["w1","w2","w3","w1"]), ("a2",["w3","w3 ","w3","w1"]),... 并且想要这个:[("a1",["w1","w2","w3"), ("a2",["w3"," w1"]) 每对不应该有重复 致不熟悉 RDD 的 Python 达人:spark.apache.org/docs/0.8.1/api/core/org/apache/spark/rdd/… 您的代码在 pySpark 1.4.1 中按预期工作: rdd = sc.parallelize([("a1",["w1","w2","w3","w1"] ), ("a2",["w3","w3","w3","w1"])]) uniqueTokens = rdd.map(lambda x: (x[0],set(x[1])) ) print(uniqueTokens.collect()) 输出:[('a1', set(['w3', 'w2', 'w1'])), ('a2', set(['w3', 'w1' ]))] 【参考方案1】:

rdd [("a1",["w1","w2","w3","w1"]), ("a2",["w3","w3","w3","w1"]), .... 中每个列表的唯一项,例如:(w1, w2, w3, w3, w1,...)。您可以在flatMap() 中使用set()

RDD.flatMap(lambda x: set(x[1]))
>> (w1, w2, w3, w3, w1,...)

#if you want to get unique items in each list and total counts across whole rdd
RDD.flatMap(lambda x: set(x[1]))
   .map(lambda x: (x , 1))
   .reduceByKey(lambda x, y : x + y ).collect()
>> [(w1, 2), (w2, 1), (w3, 2)]

希望对你有帮助

【讨论】:

数据框可以做到这一点吗?【参考方案2】:
In [48]: lt
Out[48]: [('a1', ['w1', 'w2', 'w3', 'w1']), ('a2', ['w3', 'w3', 'w3', 'w1'])]

In [49]: [(x,set(y)) for (x,y) in lt]
Out[49]: [('a1', 'w1', 'w2', 'w3'), ('a2', 'w1', 'w3')]

【讨论】:

没有工作记得我有一个 RDD ,带有键/值对,值对是一个列表

以上是关于应用 set() 删除元组内列表中的重复项 - Python的主要内容,如果未能解决你的问题,请参考以下文章

Python3基础 set() 删除一个列表中的重复项

使用python从不同长度的元组列表中删除重复项

坚持不懈续集 初学者挑战学习Python编程30天

Python求解,,怎样求出元组中的各元素之和?

如何从Java列表中删除重复项

删除列表中的重复项