2016-12-28 70 views
0

我在这里查看了一下,发现了大量列表比较方法。但没有一个覆盖我的具体问题......所以这里有云:如何比较列表中的元素,但排除元素的尾部(如果存在重复项):创建包含元素尾部的新列表

我有一个列表:

currentList = ["Blur1['size']: $gui index:1", "Blur1['size']: $gui index:3", 
       "Blur2['mix']: $gui?4:8"] 

我想删除重复的,但我不希望包括' index:1'' index:3''index'与此背后的任何数字。

然后我想创建一个新列表,并且如果在currentList中找到任何重复项,我想创建一个只包含重复项中的一个元素的新列表,但我还希望新元素包含数字在重复中找到。

本质上是创建新的列表时,我想的区别是这样的:

currentList = ["Blur1['size']: $gui index:1", "Blur1['size']: $gui index:3", 
       "Blur2['mix']: $gui?4:8"] 

currentList比较元素后创建新的列表。

newList = ["Blur1['size']: $gui 13", "Blur2['mix']: $gui?4:8"] 

新的列表仅具有"Blur1['size']: $gui" 1个元素,但它具有组合编号1和3添加到字符串的尾部,从重复进来currentList

我知道如何删除重复删除索引,我可以做一个如果测试如果'index'如果存在字符串..我面临的问题是,我想保留在'index'后面的数字并重新创建1个单元素,后面跟着'index'字符串。

我希望这是有道理的。我非常感谢这个python问题的任何帮助。

回答

0

将使用OrderedDict(保持的currentList同一顺序)split()和一些list comprehensions像这样的方法:

from collections import OrderedDict 

current_list = ["Blur1['size']: $gui index:1", "Blur1['size']: $gui index:3", 
       "Blur2['mix']: $gui?4:8"] 

temp = [item.split('index:') for item in current_list] 

d = OrderedDict() 

for i in temp: 
    if len(i) == 2: 
     d[i[0]] = i[1] if i[0] not in d else '{}{}'.format(d[i[0]], i[1]) 
    else: 
     d[i[0]] = "" 

new_list = ['{}{}'.format(*item) for item in d.items()] 

输出:

>>> new_list 
["Blur1['size']: $gui 13", "Blur2['mix']: $gui?4:8"] 
+0

感谢@ettanany,很对于保持订单有用。非常感激! – Tor

+0

你好欢迎!请让我知道它是否对您的通用用例不起作用,因为我仅对您的上面'currentList'进行了测试。例如,如果你有''Blur2 ['mix'],我不知道你的期望是什么:$ gui?4:8“','”Blur2 ['mix']:$ gui?4:9“'和' “Blur2 ['mix']:$ gui?3:5”'在你的列表中。 – ettanany

+0

快速测试后似乎工作正常。如果在使用不同参数进行更多测试后遇到问题,我会通知您。谢谢! – Tor

相关问题