2017-08-28 87 views
3

我有这样的列表(例如):删除日期和年份重复

mylist = [[20,'September 2015, August 2013, September 2016, September 2015'], [30, 'August 2012, August 2012']] 

和期望的输出是这样的:

mylist = [[20,'September 2015, August 2013, September 2016'], [30, 'August 2012']] 

基本上我想删除日期和年份从每个时间的确切日期和年份重复像我的例子(2015年9月它重复 - 必须是月份和年份),我会有一些更大的字符串,但他们是像我的例子一样,我怎么可以实现我想要的输出?谢谢!我使用python 3.

回答

2

假设顺序并不重要:

>>> [[tup[0], ', '.join(d for d in set(tup[1].split(', ')))] for tup in mylist] 
[[20, 'August 2013, September 2015, September 2016'], [30, 'August 2012']] 
+0

谢谢先生!我必须接受这个答案,因为它是最快的,我会看另一个也理解他们的方法! – Rommel

2

在循环中迭代您的项目并重新分配。您将受益于使用collections.OrderedDict来删除重复项。

from collections import OrderedDict 

for i, l in enumerate(mylist): 
    mylist[i] = [l[0], ', '.join(OrderedDict.fromkeys(l[1].split(', ')).keys())] 

print(mylist)  
[[20, 'September 2015, August 2013, September 2016'], [30, 'August 2012']] 

这是假设你的日期由,准确分离,如果不是这种情况,就需要一个更复杂的解决方案。

+0

谢谢你,我会多看看这个。 – Rommel

0

这里的滥用发电机和列表内涵式的解决方案 - 蟒蛇方式(TM)

from collections import OrderedDict 

mylist = [[20,'September 2015, August 2013, September 2016, September 2015'], [30, 'August 2012, August 2012']] 
mylist = [ 
    [x[0], ", ".join(OrderedDict.fromkeys([y.strip() for y in x[1].split(",")]).keys())] 
    for x in mylist 
] 

我占列表中的项目古怪的格式,只是假设列表由,分离,在至少(因此September 2010,September 2010)仍然会被拾取并正确格式化)

+1

我也会多看看这个,谢谢! – Rommel

1

使用转换列表以设置删除重复的事实。下面的例子就是这样做的 - 将字符串拆分为一个列表,将其转换为一个集合,将其转换回列表,并将其连接回一个字符串。

mylist = [[20,'September 2015, August 2013, September 2016, September 2015'], [30, 'August 2012, August 2012']] 
newlist = [] 
for item in mylist: 
    newlist.append([item[0], ", ".join(list(set(item[1].split(", "))))]) 
print(newlist) 

请注意,月份的顺序可能不会保留 - 设置没有排序。

1

这里是另一种解决方案:

map(lambda x: [x[0]] + list(set([i.strip() for i in x[1].split(',')])), my list) 

[[20, 'August 2013', 'September 2015', 'September 2016'], [30, 'August 2012']] 
+0

我也会检查一下,非常感谢你的时间! – Rommel

0

如果你没事的顺序被搞砸了,你可以将其更改为一组,并将其改回列表。使用例如:

newlist = [[子列表[0], ''。加入(集(子列表[1] .split( '')))]在子列表MYLIST]

运行它我的结束,这是输出:

[20, '2013年8月,2015年9月,2016年9月'],[30, '2012年8月']] 2012年,2012' 年8月,30]