[英]Replace duplicates in a list column
我有一个列表,在一个(最后一个)列中是一串逗号分隔的项目:
temp = ['AAA', 'BBB', 'CCC-DDD', 'EE,FFF,FFF,EE']
现在我想删除该列中的重复项。
我试图从每一列中列出一个列表:
e = [s.split(',') for s in temp]
print e
哪个给了我:
[['AAA'], ['BBB'], ['CCC-DDD'], ['EE', 'FFF', 'FFF', 'EE']]
现在我尝试删除重复项:
y = list(set(e))
print y
最终出现错误的是什么
TypeError: unhashable type: 'list'
我很感激任何帮助。
编辑 :
我没有确切地说出最终结果应该是什么。 列表应该是这样的
temp = ['AAA', 'BBB', 'CCC-DDD', 'EE', 'FFF']
只应在最后一列中删除重复项。
对列表中不在列表列表上的元素应用set
。 您希望您的set
包含每个列表的字符串,而不是列表。
e = [list(set(x)) for x in e]
你也可以直接做到:
e = [list(set(s.split(','))) for s in temp]
>>> e
[['AAA'], ['BBB'], ['CCC-DDD'], ['EE', 'FFF']]
你可能想要sorted(set(s.split(',')))
来确保字典顺序( 即使在python 3.7中也没有订购集合)
对于平面有序列表,创建一个平面集合理解并对其进行排序:
e = sorted({x for s in temp for x in s.split(',')})
结果:
['AAA', 'BBB', 'CCC-DDD', 'EE', 'FFF']
这是使用itertools.chain方法的解决方案
import itertools
temp = ['AAA', 'BBB', 'CCC-DDD', 'EE,FFF,FFF,EE']
y = list(set(itertools.chain(*[s.split(',') for s in temp])))
# ['EE', 'FFF', 'AAA', 'BBB', 'CCC-DDD']
a = ['AAA', 'BBB', 'CCC-DDD', 'EE,FFF,FFF,EE']
b = [s.split(',') for s in a]
c = []
for i in b:
c = c + i
c = list(set(c))
['EE', 'FFF', 'AAA', 'BBB', 'CCC-DDD']
以下是在Python中执行此操作的纯函数方法:
from functools import partial
split = partial(str.split, sep=',')
list(map(list, map(set, (map(split, temp)))))
[['AAA'], ['BBB'], ['CCC-DDD'], ['EE', 'FFF']]
或者我看到答案不需要列表中的列表:
from itertools import chain
list(chain(*map(set, (map(split, temp)))))
['AAA', 'BBB', 'CCC-DDD', 'EE', 'FFF']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.